具有聚合初始化的指针容器
Container of pointers with aggregate initialization
问题的名称有点模棱两可,但我不知道它是如何称呼的。 我可以通过手动输入创建一个对象的容器,例如
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();
我不明白为什么它可能是错误的,我仍然怀疑。
这称为聚合初始化,要初始化指针向量,只需将向量类型定义为指针,并像初始化任何其他类型一样初始化它们:
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
您可以直接在列表初始化中调用new
。
std::vector<myobj*> vec = {new MyObj(), new MyObj()}
您仍然必须设法在最后delete
指针。
很简单。将每个{/* All fields here */}
替换为指针。
myobj o1, o2;
std::vector<myobj*> vec = {
&o1, &o2
};
有关指针和对象生存期的常见警告适用。尽量不要让它们晃来晃去。
相关文章:
- 如何使用数据对象上的常量指针初始化类
- 使用指针初始化 char 数组或字符串 C++
- 使用无效指针初始化指针声明符的行为是否未定义?
- 指针:初始化与声明
- 启动线程会导致指针初始化时出现分段错误
- 使用函数声明进行函数指针初始化 - 是否可能
- 类初始化中的指针初始化
- 结构数组的指针初始化
- 如何从其抽象母类上的指针初始化子类?
- C 用结构指针初始化结构
- 如何用无效指针初始化unique_ptr的向量
- PCL中的这些增强指针初始化是不同的
- 通过指针初始化结构
- 从函数指针初始化成员函数
- 使用作用域内生成的指针初始化静态成员
- 使用"this"指针初始化 std::array
- C++缺乏指针初始化和使用逻辑
- constexpr 使用指针初始化
- C 指针初始化的不良初始化可能是什么后果
- 指针初始化无效?如果不是,那是什么