问题的名称有点含糊不清,但是我不知道如何称呼它。 我可以使用手动输入创建对象容器
std::vector<myobj> vec =
{
{ /*All fields here*/ }, ... {/*Fields here*/}
};
但是指针呢?使用new来创建指针向量的正确语法是什么?
关于建议明确创建新对象的答案,这正是我要避免的事情。
我想到了:
std::vector<myobj*> vec =
{ (new myobj{ /*fields*/ }) };
....
for (auto& c : vec)
delete c;
vec.clear();
我仍然不明白为什么这可能是错误的。
答案 0 :(得分:3)
这称为聚合初始化,用于初始化指针向量,只需将向量类型定义为指针,然后像对其他任何类型一样将其初始化:
MyObjc myObj1* = new MyObj();
MyObjc myObj2* = new MyObj();
std::vector<MyObj*> vec = { myObj1, myObj2 };
请记住在创建这些指针后正确删除它们,或者考虑使用类似std:unique_ptr
的指针。
参考:
https://en.cppreference.com/w/cpp/language/aggregate_initialization https://en.cppreference.com/w/cpp/memory/unique_ptr
答案 1 :(得分:2)
您可以在列表初始化中直接调用new
。
std::vector<myobj*> vec = {new MyObj(), new MyObj()}
您仍然必须设法delete
将指针放在最后。
答案 2 :(得分:0)
简单。用指针替换每个{/* All fields here */}
。
myobj o1, o2;
std::vector<myobj*> vec = {
&o1, &o2
};
关于指针和对象生存期的一般警告适用。尽量不要让他们晃来晃去。