3
我只想确定这是否是正确的方式来删除已分配的内存,其中向量中存在指向该对象的元素;在指针向量中删除一个元素
vector<Fruit*> temp;
让我们说,如果向量中的第六元素是指向我想删除的对象。
Fruit* a = temp[5];
temp.erase(temp.begin()+5);
delete a;
是这样的吗? THX
我只想确定这是否是正确的方式来删除已分配的内存,其中向量中存在指向该对象的元素;在指针向量中删除一个元素
vector<Fruit*> temp;
让我们说,如果向量中的第六元素是指向我想删除的对象。
Fruit* a = temp[5];
temp.erase(temp.begin()+5);
delete a;
是这样的吗? THX
的Kerrek的建议当然是OK的:
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
也可能派上用场。
'unique_ptr'在这里比'shared_ptr'更有意义,因为不需要共享所有权。 – 2013-02-23 00:01:50
当然。甚至只是'删除temp [5]; temp.erase(temp.begin()+ 5);'。 – 2013-02-22 22:21:58
好的thx。我只是想确保我做的是正确的事情:D – 2013-02-22 22:24:58