特定のインスタンスのコンストラクタ内で静的メンバー変数を初期化します。それは悪い考えですか?インスタンスのコンストラクタ内で静的メンバーを初期化する
状況は次のとおりです。このクラスのすべてのインスタンスが共有する静的メンバー変数があります。通常は、静的初期化子を使用します。しかし、私は、コンストラクタが呼び出されるまで静的オブジェクトを構築するのに必要な情報を持っていません。もちろん、コンストラクタが呼び出されるたびに新しいオブジェクトを作成したくないので、このようなことをしたいと思います。私はもちろんxyz
の知っている
class Foo
{
static Bar * bar;
Foo(Xyz xyz);
};
Bar * Foo::bar = nullptr;
Foo::Foo(Xyz xyz)
{
if (Foo::bar == nullptr)
{
// initialize static bar
Foo::bar = new Bar(xyz);
}
}
はFoo
のコンストラクタに異なる呼び出しに対して異なることmigth。それは私には関係ありません。
この悪いソフトウェア設計ですか?コンストラクタ内で静的オブジェクトを初期化するのはちょっと奇妙です。しかし、それはシングルトンデザインパターンとそれほど違いはありません。だから多分それは大丈夫ですか?コメントの男性のための
EDIT
感謝。人々はこのデザインのファンではないようです。私はFoo
の最初のインスタンス化の前にBar
を作成し、Foo
のコンストラクタのパラメータとしてBar *
を渡すように変更します。各Foo
にはBar
へのポインタがあり、すべてFoo
がすべて同じBar
を指していることを確認します。それは良いですか?
あなたが初期化を行うことはありませんのでご注意ください。あなたは割り当てをします。 – NathanOliver
_initialization_に使用する値はどのようにして取得できますか?実行時にのみ利用可能ですか?サンプルはコンパイルされません。 –
シングルスレッドはOKです。マルチスレッド競合状態。 –