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,这意味着它的元素是默认初始化的。由于您的数组包含用户定义的类型,这意味着将调用它们的默认构造函数。如果您的数组包含内置类型或 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 回答