删除指针向量中的元素

时间:2013-02-22 22:19:08

标签: c++

我只是想确定这是否是删除已分配内存的正确方法,其中向量中存在指向该对象的元素;

vector<Fruit*> temp;

假设向量中的第六个元素指向我要删除的对象。

Fruit* a = temp[5];
temp.erase(temp.begin()+5);
delete a;

这是对的吗? THX

1 个答案:

答案 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_ptrboost::ptr_vector也可能派上用场。