如何初始化复杂对象的数组?

时间:2013-11-11 11:06:52

标签: c++

我有:

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

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

};

我的问题是 - 在调用构造函数的时间和之后数组包含什么?我应该使用for循环自己初始化它还是编译器为每个数组调用默认构造函数[i],0<=i<SOME_FIXED_SIZE

3 个答案:

答案 0 :(得分:6)

数组是默认初始化,这意味着它的元素是默认初始化逐个。由于您的数组包含用户定义的类型,这意味着将调用它们的默认构造函数。如果您的数组包含内置类型或POD,则必须是显式的并且 value-initialize 它,因为默认初始化意味着不对元素执行初始化:

anOtherObject() : array() {}
//                ^^^^^^^ value-initialize array

答案 1 :(得分:0)

您不需要初始化它们。创建一个数组子对象将默认构造。除非您明确省略默认构造函数。

  

当一个类对象数组被初始化(显式或隐式)并且元素由构造函数初始化时,应该按照下标顺序为数组的每个元素调用构造函数; [§12.6/ 3]

答案 2 :(得分:0)

创建anOtherObject类型的对象时:  anOtherObject a; 由于对象a具有SomeObject类型的私有数组,因此应为数组的每个元素调用SomeObject类的默认构造函数。 在调用构造函数之前,数组应包含“垃圾”,因为它在堆栈上静态分配。 调用构造函数后,内存应包含您在默认构造函数中设置的内容;例如,将所有内容初始化为0