非常によく似た質問を見てきましたが、答えを理解しているかどうかはよくわかりません。コンストラクターをデリゲートすると、初期化リストからどの初期化が発生しますか?
例:
MyClass::MyClass(int a, int b)
:
MyClass(a, b, NULL),
int1(a),
int2(b),
pOtherClass(NULL)
{
}
MyClass::MyClass(int a, int b, Other *p)
:
int1(a),
int2(b),
pOtherClass(p)
{
if (pOtherClass == NULL)
{
pOtherClass = &DefaultInstance;
}
}
ここでは、コンパイラの設定により、両方のクラスの完全な初期化子リストが必要です。しかし、私が望んでいないのは次のとおりです。
- 最初のコンストラクター ( ) が 2 番目のコンストラクター ( )
int, int
を呼び出すint, int, Other *
- 2 番目のコンストラクターは、デフォルトのアドレスを
pOtherClass
- 最初のコンストラクターの初期化リストが に割り当て
pOtherClass
られNULL
ます。
一番上にリンクした質問は、この動作が発生しないことを示しているようですint, int
が、( ) コンストラクターの初期化子リストのポイントは何ですか? コンパイラを満足させるためだけですか?