当需要列表类型容器时,我一直使用向量来存储对象。 我想知道如何将构造函数传递给数组指针。如果对象foo没有构造函数,下面的工作在C ++ 03中
foo* p = new foo[5]()
现在如果foo
的构造函数需要int
,我将如何在上述语句中传递构造函数呢?
答案 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) };