我只是想确定这是否是删除已分配内存的正确方法,其中向量中存在指向该对象的元素;
vector<Fruit*> temp;
假设向量中的第六个元素指向我要删除的对象。
Fruit* a = temp[5];
temp.erase(temp.begin()+5);
delete a;
这是对的吗? THX
答案 0 :(得分:2)
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
destroy会删除它拥有的对象,或者正确地减少引用数量。如果不涉及共享所有权,则可以使用unique_ptr
。 boost::ptr_vector
也可能派上用场。