如何初始化复杂对象的数组
How to initialize array of a complex object?
我有:
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
相关文章:
- 销毁C++中动态分配的内存(数组对象)
- 数组对象的生存期是否在重用其元素存储时结束?
- 为什么顶点数组对象会导致错误?
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- OpenGL 顶点数组对象与 tinyobjloader
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- C++ RapidJson 帮助反序列化数组对象
- ptrdiff_t可以表示指向同一数组对象元素的指针的所有减法吗?
- 检查成员函数是否返回临时对象或数组对象
- 为什么 std::variant 不能容纳数组对象类型,而联合可以?
- 当数组对象以函数参数传递时,为什么复制构造函数会自称
- 如何使用箭头指针打印出一类数组对象,这些对象中有多个分数
- C++17 std::shared_ptr<> 类数组对象的重载运算符 []
- 添加两个具有运算符重载的数组对象,从而导致分段错误
- opengl:两个不同的矢量可以绑定到同一个顶点数组对象吗
- 使用相同的数据填充数组对象或使用指针
- 方法用于最快的分配,并且不需要将动态大小的数组对象作为局部变量
- 如何将2d数组对象传递给c++中的函数
- ReferenceTable溢出(jni-android),数组对象释放