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