我们如何使用构造函数初始化对象数组。例如,我们有:
class K{
K(int i){}
};
int main(){
K* k = new K[10];
}
这会导致编译错误。怎么处理呢?
答案 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
。