c++在带参数的数组中分配和构造对象

C++ allocate and construct objects in array with parameters

本文关键字:分配 对象 数组 参数 c++      更新时间:2023-10-16

从这里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'
}

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

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

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

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

你写的不工作,但你可以这样做,因为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};