![](/img/trans.png)
[英]C++ Initialization of member objects which do not have default constructor:
[英]Default initialization of C++ member array of objects?
假设我建立了一个C ++类,如下所示:
class Foo{
public:
struct Pair{
int x;
int y;
Pair(){ x = 2; y = 4; }
};
private:
Pair pairArr[16];
}
如果不另外初始化pairArr,则其中的Pair结构的默认值是什么? C ++是调用构造函数(用x = 2,y = 4初始化它)还是尚未创建对象,使我剩下一个“垃圾”对象数组,直到我自己初始化索引为止?
我知道这是否是原始数据类型的数组,它们是默认初始化的(如果我有一个整数数组,它们都将为0)。 但是,我不知道这种行为是否适用于像我的struct这样的更复杂的对象。
类和结构在c ++中是等效的,只是默认的访问说明符有所不同。 因此,检查Arrays和Classes ,它说:
普通的数组声明样式对数组中的每个对象使用默认的构造函数(如果该类具有默认的构造函数)
从实际的角度来看,请在您的结构中执行此操作:
Pair() : x(2), y(4) { std::cout << "Called\n"; }
您将看到该消息被打印16次。
当您想知道被调用的内容(通常是它们的顺序)时,这是一种常用的方法(将打印消息添加到构造函数到析构函数)。
提示:使用初始化列表,而不是在构造函数的主体内分配值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.