使用构造函数初始化对象数组

时间:2014-03-16 22:31:31

标签: c++ arrays pointers initialization

我们如何使用构造函数初始化对象数组。例如,我们有:

class K{
K(int i){}
};
int main(){
K* k = new K[10]; 
}

这会导致编译错误。怎么处理呢?

2 个答案:

答案 0 :(得分:3)

例如

K* k = new K[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

前提是您的编译器支持C ++ 2011的此功能。

答案 1 :(得分:3)

由于class K唯一适用的构造函数是int,编译器无法在新分配的数组中默认构造元素,这是它在下面尝试(并失败)的内容:

K * k = new K[10]; // 1. allocate memory for 10 elements
                   // 2. default these 10 elements them

如果K有一个默认构造函数,即上述情况可行。如果它被定义为:

class K {
  K()      { /* ... */ } // <- default constructor
  K(int i) { /* ... */ }

  /* ... */
};

您必须使用以下内容显式初始化数组的每个元素:

K * k = new K[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // C++11

注意:如果您不喜欢在C ++ 11中工作,则无法使用上述解决方案,并且支持初始化的解决方案并非如此在这种情况下,最简单的解决方案是向K添加默认构造函数,或者使用std::vector并一次添加一个K元素(或使用K

的复制构造函数