C ++成员对象数组的默认初始化?

时间:2017-05-11 20:40:59

标签: c++ arrays oop struct constructor

假设我有一个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初始化它)或者是尚未创建的对象,留下一个" junk"对象,直到我自己初始化索引?

我知道如果它是一个原始数据类型的数组,它们是默认初始化的(如果我有一个int数组,它们都将为0)。但是,我不知道这种行为是否适用于像我的结构这样的更复杂的对象。

1 个答案:

答案 0 :(得分:4)

类和结构在中是等效的,它只是默认的访问说明符不同。请检查Arrays and Classes,其中包含:

  

普通数组声明样式使用数组中每个对象的默认构造函数(如果该类具有默认构造函数)

从实际的角度来看,在你的结构中这样做:

Pair() : x(2), y(4) { std::cout << "Called\n"; }

您将看到信息被打印16次。

这是一种常用方法(将构造函数中的打印消息添加到析构函数中),当您想知道所调用的内容时(通常是它们的顺序)。

提示:使用初始化列表,而不是在构造函数体内分配值。