如果在构造这样的类时创建了对象:
class MyClass
{
private:
std::vector < MyObject*> MyObjects = { new MyObject };
...
在析构函数期间是否需要删除向量中的对象?
答案 0 :(得分:2)
是的,std::vector < MyObject*> MyObjects
包含指向对象的指针。向量假定它不拥有对象,因此默认情况下不会删除它们。
如果要自动销毁对象,请更改类型:
std::vector <std::unique_ptr<MyObject>> MyObjects
或者,删除以下位置的所有指针:
使用std::unique_ptr
通常是首选的解决方案,因为它可以确保释放内存。但这是以没有默认分配/复制构造函数为代价的。您要么没有分配/复制就活着,要么仅停留在移动语义上,要么必须明确定义分配/复制。但这并不是一个大代价,因为使用简单的指针,您仍然必须定义赋值/复制。