从这里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'
}
这不起作用......
答案 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::array
或std::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};