其他分享
首页 > 其他分享> > c – 破坏存储在指针向量中的对象[复制]

c – 破坏存储在指针向量中的对象[复制]

作者:互联网

参见英文答案 > Does std::list::remove method call destructor of each removed element?                                    6个
我有一个包含指针的类,该类不会继承任何内容

class MyClass
{
public:
MyClass();
~MyClass();

private:
//i have pointers here
};
MyClass::~MyClass()
{
print("destroyed..");
}

现在我必须使用这个类作为向量中的指针,如下所示:

vector<MyClass*> classes;

在这里推一些类但是当我删除一个元素时:

classes.remove(index);

析构函数不会被调用,我认为我有内存泄漏.
那么我如何让它调用析构函数

解决方法:

当指针被移除或清除时​​,指针向量不会删除指针.向量无法知道指针是否是动态分配的.调用删除不是它的工作.

如果需要,可以在指针上调用delete.您的问题中没有足够的细节来确定是否有必要(您没有显示指向的对象是如何分配的).但是,由于您声称存在内存泄漏,这可能表明它们是动态分配的.直接的解决方案是调用delete:

delete *it;
classes.erase(it); // vector has no remove member function

更安全的解决方案是存储唯一的所有权智能指针,例如std :: unique_ptr< MyClass>.标准库还为共享和弱所有权提供智能指针.见Smart Pointers.

以上所有假设您确实需要存储指针.通常,存储值更安全,更清晰:

std::vector<MyClass> classes; // but don't call it "classes". A vector stores objects.

标签:c,destructor,pointers,memory-management,stdvector
来源: https://codeday.me/bug/20190825/1719656.html