3

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

vector<Fruit*> temp;

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

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

这是正确的吗?谢谢

4

1 回答 1

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销毁会删除它拥有的对象,或者适当地减少引用的数量。如果不涉及共享所有权,您可以使用unique_ptr. boost::ptr_vector也可能派上用场。

于 2013-02-22T23:52:44.940 回答