相互依存関係を持つ他のオブジェクトを合成するクラスがある場合、(どのように) 構築順序を強制する必要がありますか?
例えば
class Parent
{
Child1 c1;
Child2 c2;
};
Child2 のコンストラクターが Child1& を必要とし、c1 を c2 コンストラクターに渡したいとします。
私が次のことをするだけなら...
Parent::Parent()
: c2(c1)
{
}
... c2 の初期化子が実行されるまでに c1 が構築されない可能性があるため、これは良いことではないでしょうか? それとも、クラス宣言で c1 が c2 の前に来るだけで十分ですか?
または、明示的に c1 コンストラクターを参照する必要があります (それが必要でない場合は、明示的にするためにそうすることをお勧めしますか?)。例えば
class Parent
{
Child1 c1;
Child2 c2;
};
Parent::Parent()
: c1()
: c2(c1)
{
}