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

C++ C++;使用参数在数组中分配和构造对象,c++,new-operator,C++,New Operator,从这里开始,我不清楚是否可以使用参数分配和构造对象。像这样: 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' } 这不起作用…不起作

从这里开始,我不清楚是否可以使用参数分配和构造对象。像这样:

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

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

这是行不通的,但您可以使用
std::vector
来实现:

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

您编写的内容不起作用,但您可以从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};
MyClass*a=新的MyClass[5]{1,1,1,1};
MyClass b[5]={1,1,1,1};
std::载体c(5,1);
std::向量d(5,MyClass(1));
std::数组e{1,1,1,1};

您编写的东西不起作用,但您可以从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};
MyClass*a=新的MyClass[5]{1,1,1,1};
MyClass b[5]={1,1,1,1};
std::载体c(5,1);
std::向量d(5,MyClass(1));
std::数组e{1,1,1,1};

但它一个接一个地构造它?我不需要向量。@tower120是的,就像实例化数组一样。我必须这样做
MyClass*p3=static\u cast(::operator new(sizeof(MyClass[5]))然后为每个对象显式调用构造函数?@tower120不,你按照我在回答中告诉你的做。我有使用C本机数组的池对象实现。我一次创建一堆对象。现在我想创建初始化对象,但它一个一个地构造它?我不需要向量。@tower120是的,就像实例化数组一样。我必须这样做
MyClass*p3=static\u cast(::operator new(sizeof(MyClass[5]))然后为每个对象显式调用构造函数?@tower120不,你按照我在回答中告诉你的做。我有使用C本机数组的池对象实现。我一次创建一堆对象。现在我想创建初始化对象。看起来不错,但实例的可变数量和每个对象的参数呢?:)@塔:在这种情况下,希望您可以默认构建它们。或者它根本不起作用。好吧,让我们考虑一下我们没有默认构造函数。然后我必须迭代每个构造函数。对吗?看起来不错,但实例和每个对象参数的可变数量呢?:)@塔:在这种情况下,希望您可以默认构建它们。或者它根本不起作用。好吧,让我们考虑一下我们没有默认构造函数。然后我必须迭代每个构造函数。对吧?相似:相似: