1

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

foo* p = new foo[5]()

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

4

3 回答 3

3

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

更新 1

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

更新 2

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

于 2013-04-14T20:18:19.583 回答
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} );
于 2013-04-14T20:26:07.227 回答
1

how would I pass the constructor in the above statement?

new[] does not have a form for forwarding constructor parameters.

You would instead call the constructors yourself.

foo* p = new foo[5]{ foo(1), foo(2), foo(3), foo(4), foo(5) };
于 2013-04-14T20:22:27.333 回答