删除在对象构建期间创建的对象?

时间:2020-07-12 06:20:27

标签: c++ c++11

如果在构造这样的类时创建了对象:

class MyClass
{
private:
  std::vector < MyObject*> MyObjects = { new MyObject };
...

在析构函数期间是否需要删除向量中的对象?

1 个答案:

答案 0 :(得分:2)

是的,std::vector < MyObject*> MyObjects包含指向对象的指针。向量假定它不拥有对象,因此默认情况下不会删除它们。

如果要自动销毁对象,请更改类型:

std::vector <std::unique_ptr<MyObject>> MyObjects

或者,删除以下位置的所有指针:

  1. 析构函数
  2. 分配运算符
  3. 在构造函数中,如果发生异常。如果有例外,则未经处理,向量的一部分将被对象填充。由于异常,除非明确处理,否则指针不会被删除。

使用std::unique_ptr通常是首选的解决方案,因为它可以确保释放内存。但这是以没有默认分配/复制构造函数为代价的。您要么没有分配/复制就活着,要么仅停留在移动语义上,要么必须明确定义分配/复制。但这并不是一个大代价,因为使用简单的指针,您仍然必须定义赋值/复制。

相关问题