是否删除在对象构造过程中创建的对象
Delete objects created during object construction?
如果对象是在构造类的过程中创建的,如下所示:
class MyClass
{
private:
std::vector < MyObject*> MyObjects = { new MyObject };
...
在析构函数过程中,我需要删除向量中的对象吗?
std::vector < MyObject*> MyObjects
包含指向对象的指针。矢量假定它不拥有这些对象,因此默认情况下不会删除它们。
如果您想自动销毁对象,请更改类型:
std::vector <std::unique_ptr<MyObject>> MyObjects
或者,删除中的所有指针
- 析构函数
- 赋值运算符
- 在构造函数中,以防出现异常。如果出现异常,那么在不进行处理的情况下,向量的一部分将填充对象。由于出现异常,除非明确处理,否则指针不会被删除
使用std::unique_ptr
通常是首选解决方案,因为它可以确保释放内存。但这是以没有默认赋值/复制构造函数为代价的。您要么生活在没有分配/复制的环境中,要么只使用移动语义,要么必须显式定义分配/复制。但这并不是一个很大的代价,因为对于简单的指针,您仍然需要定义赋值/复制。
相关文章:
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 是否删除在对象构造过程中创建的对象
- C++:如何在对象构造过程中调用初始值设定项列表之外的成员构造函数
- 运行程序时找不到共享对象库,但在编译过程中链接了它
- 在构造过程中更改的对象类型
- C++ 列表中的对象变量在迭代过程中不会更新
- 在输入结构对象的输入过程中运行时间错误
- 在提前操作过程中,对象会发生什么
- 是否可以在同一过程中具有多个ORB对象
- 构造std::thread对象过程中的详细信息
- Qt:解构过程中的儿童生活对象
- 在派生类的对象创建过程中使用shared_from_this()的两阶段构造
- 在构造子类对象的过程中,更改一个类属性的数据类型会导致segfault
- 通过构造过程中获得的指针修改const对象
- 有人能确切地解释一下,如果在堆上分配对象数组的过程中抛出异常,会发生什么吗
- 在对话框消息过程中获取应用对象指针
- 如何在从c++到QML再到c++的传递过程中避免对象复制
- 派生过程中形成的未命名对象
- 我可以让gcc在编译过程中发出对象的类型吗
- 如果传递到 std::swap 的对象在交换过程中引发异常怎么办?