1

クラスに参照データ メンバーが必要ですが、コンストラクターで初期化したくありません。

どうすればこれを行うことができますか?

4

3 に答える 3

10

それは不可能です。ctor 初期化リスト内で参照データ メンバーを初期化する必要があります。本当にこのようなことをしなければならない場合は、参照の代わりにデータ メンバーへのポインターを使用してください。ctor へのポインタを初期NULL化し、必要なときにいつでも正しく初期化します。

于 2012-06-27T04:04:19.667 に答える
2

それは参照変数の属性であるため、コンストラクターで初期化する必要があります(初期化リストを介してのみ)(参照を初期化する必要があります)。

デフォルトのパラメーターで初期化したままにすることで、静的/グローバル変数に初期化できます。

YourClass::YourClass(int& ref = _SomeGlobalVar) : m_RefInClass(ref){}

ただし、それ以上再初期化することはできません。

于 2012-06-27T04:13:46.797 に答える
0

前述のように、参照がどこかに必要な場合、これはよくない考えです。通常、その理由には確固たる理由があります。

ただし、実行していることに特定の理由がある場合は、Null Object Patterns を参照してください

ある種の「実装されていない」例外をスローするか、まったく何もしない null オブジェクトを作成できます。初期化子リストでメンバー変数を初期化する必要がありますが、少なくとも将来変更を加える柔軟性があります。

于 2012-06-27T06:31:08.803 に答える