2017-05-29 14 views
3

を持たないクラスMyClassを考えてください。デフォルトのコンストラクタです。私は、次のようなコードを書きたいC++:グローバルクラス変数に値を代入する

MyClass instance; 

void init_system() { 
    instance = MyClass(parameters, of, the, constructor); 
} 

私はもちろんの上に書いたコードがエラーMyClassので失敗は引数を取りません何のC'torを持っていません。

正しい方法がありますか、回避策を実装する必要があります。共有ポインタを使用していますか?

+0

あなたがやろうとしていることは(少なくとも私にとって)不明です。何を初期化しますか?静的メンバー変数(AKAクラス変数)?静的なinitメソッドを作成するだけですか?他に何か?どうか明らかにしてください。あなたはシングルトンを望みますか?または静的なファクトリメソッドですか? – hyde

答えて

7

まあ、あなたのクラスのデフォルトのオブジェクトは感覚的に存在するか、そうでないことがあります。
後者の場合、オブジェクトの構成を延期するために、std::optionalboost::optional、C++ 17より前)に興味があるかもしれません。あなたのinit_system()関数にオブジェクトの初期化を移動することができ

+0

もう一つのクラスはstd :: unique_ptrです。 –

1

MyClass& init_system() 
{ 
    static MyClass instance(parameters, of, the, constructor); 
    return instance; 
} 

あなたも、シングルトンパターンを見てみたい、そしてそれについての広範な議論を読むことができる;)

そして、はい、別の解決方法は、​​またはshared_ptr<>を使用することです。

1

は、正しいパラメータではMyClassを初期化するだろう、これを達成するための2通りの方法が....

MyClass instance(parameters, of, the, constructor); 

があります。

のgetInstanceとシングルトンパターン

MyClass & MyClass::getInstance(){ 
    static MyClass instance(parameters, of, constructor); 
    return instance; 
} 

は、呼び出し時に返されます。

第2のパターンは、オブジェクトの構築時の制御を改善します。

関連する問題