当需要列表类型容器时,我一直使用向量来存储对象。我想知道如何将构造函数传递给数组指针。如果对象 foo 没有构造函数,则以下在 C++03 中有效
foo* p = new foo[5]()
现在,如果foo
required 的构造int
函数我将如何在上述语句中传递构造函数呢?
当需要列表类型容器时,我一直使用向量来存储对象。我想知道如何将构造函数传递给数组指针。如果对象 foo 没有构造函数,则以下在 C++03 中有效
foo* p = new foo[5]()
现在,如果foo
required 的构造int
函数我将如何在上述语句中传递构造函数呢?
这不可能。您的foo
实例只能是默认构造的。
更新 1
如果您foo
没有默认构造函数,那么您将收到有关使用已删除函数或没有匹配 ctor 的编译器错误。
更新 2
我看到其他人提供 C++11 解决方案。我的回答似乎只对 C++03 或更早版本是正确的。
从 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} );
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) };