将构造函数传递给指针数组

时间:2013-04-14 20:16:52

标签: c++

当需要列表类型容器时,我一直使用向量来存储对象。 我想知道如何将构造函数传递给数组指针。如果对象foo没有构造函数,下面的工作在C ++ 03中

foo* p = new foo[5]()

现在如果foo的构造函数需要int,我将如何在上述语句中传递构造函数呢?

3 个答案:

答案 0 :(得分:3)

这是不可能的。您的foo个实例只能默认构建。

更新1

如果您的foo没有默认构造函数,那么您将收到有关使用已删除函数或无匹配ctor的编译器错误。

更新2

我看到其他人提供C ++ 11解决方案。我的回答似乎只适用于C ++ 03或更早版本。

答案 1 :(得分:3)

从C ++ 11开始,您可以使用大括号初始值设定项:

foo * p = new foo[5] { 1, 2, 3, 4, 5 };   // better: "auto p = ..."

这假设foo 隐式 int

但你也可以使用容器:

std::vector<foo> v { 1, 2, 3 };
std::list<foo> w { 1, 2, 3 };

或者也许:

std::unique_ptr<foo[]> q(new foo[4] { 1, 2, 3, 4} );

答案 2 :(得分:1)

  

我将如何在上述语句中传递构造函数?

new[]没有转发构造函数参数的表单。

您可以自己调用构造函数。

foo* p = new foo[5]{ foo(1), foo(2), foo(3), foo(4), foo(5) };