C ++使用参数在数组中分配和构造对象

时间:2014-07-04 18:22:26

标签: c++ new-operator

从这里http://www.cplusplus.com/reference/new/operator%20new[]/,我不清楚是否可以分配和构造带参数的对象。像这样:

struct MyClass {
  int data;
  MyClass(int k) {} 
};

int main () {
  // allocates and constructs five objects:
  MyClass * p1 = new MyClass[5](1);               // allocate 5 objects, and init all with '1'
}

这不起作用......

2 个答案:

答案 0 :(得分:2)

那不行,但您可以使用std::vector<MyClass>

std::vector<MyClass> p1(5, 1);

这将创建一个包含5个MyClass个对象的向量。请注意,这是有效的,因为您的单个参数构造函数不是explicit。如果是,你需要

std::vector<MyClass> p1(5, MyClass(1));

答案 1 :(得分:2)

你所写的内容不起作用,但你可以这样做,因为C ++ 11 不过,最好避免动态分配并选择自动对象 此外,大多数情况下您应该使用标准容器,例如std::arraystd::vector

MyClass * a = new MyClass[5]{1,1,1,1,1};
MyClass b[5] = {1,1,1,1,1};
std::vector<MyClass> c(5, 1);
std::vector<MyClass> d(5, MyClass(1));
std::array<MyClass,5> e{1,1,1,1,1};