我只是想确定这是否是删除已分配内存的正确方法,其中向量中存在指向该对象的元素;
vector<Fruit*> temp;
假设向量中的第六个元素是否指向我要删除的对象。
Fruit* a = temp[5];
temp.erase(temp.begin()+5);
delete a;
这是正确的吗?谢谢
我只是想确定这是否是删除已分配内存的正确方法,其中向量中存在指向该对象的元素;
vector<Fruit*> temp;
假设向量中的第六个元素是否指向我要删除的对象。
Fruit* a = temp[5];
temp.erase(temp.begin()+5);
delete a;
这是正确的吗?谢谢
Kerrek 的建议当然没问题:
delete temp[5];
temp.erase(temp.begin() + 5);
但是,我正在写一个答案,建议您考虑智能指针。这是一个例子:
std::vector<std::shared_ptr<Fruit>> v;
// add some elements
v.erase(temp.begin() + 5);
在这种情况下,没有内存泄漏,因为shared_ptr
销毁会删除它拥有的对象,或者适当地减少引用的数量。如果不涉及共享所有权,您可以使用unique_ptr
. boost::ptr_vector
也可能派上用场。