6

私は持っている:

class SomeObject {
public:
    SomeObject() { ... }
    // Other fields and methods
};

class anOtherObject {
private:
    SomeObject array[SOME_FIXED_SIZE];
public:
    anOtherObject() : ... { ... }

};

私の質問は、コンストラクターが呼び出されたときと呼び出された後、配列には何が含まれていますか? for ループを使用して自分で初期化する必要がありますか、それともコンパイラが各 array[i] の既定のコンストラクターを呼び出します0<=i<SOME_FIXED_SIZEか?

4

2 に答える 2

6

配列はdefault-initialized です。つまり、その要素はデフォルトで 1 つずつ初期化されます。配列はユーザ​​ー定義の型を保持するため、デフォルトのコンストラクターが呼び出されることを意味します。配列が組み込み型または POD を保持している場合、デフォルトの初期化は要素に対して初期化が実行されないことを意味するため、明示的に値を初期化する必要があります。

anOtherObject() : array() {}
//                ^^^^^^^ value-initialize array
于 2013-11-11T11:08:44.477 に答える
0

タイプ anOtherObject のオブジェクトを作成する場合: anOtherObject a; オブジェクト a には SomeObject 型のプライベート配列があるため、配列の各要素に対して SomeObject クラスのデフォルト コンストラクターが呼び出されます。コンストラクターが呼び出される前に、配列はスタックに静的に割り当てられるため、「ガベージ」を含む必要があります。コンストラクターが呼び出された後、メモリには、デフォルトのコンストラクターで設定したものが含まれている必要があります。例: すべてを 0 に初期化する

于 2013-11-11T12:51:04.077 に答える