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

How to initialize array of a complex object?

本文关键字:数组 对象 复杂 初始化      更新时间:2023-10-16

我有:

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

数组

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

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

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