2013-02-22 63 views
3

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

vector<Fruit*> temp; 

让我们说,如果向量中的第六元素是指向我想删除的对象。

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

是这样的吗? THX

+8

当然。甚至只是'删除temp [5]; temp.erase(temp.begin()+ 5);'。 – 2013-02-22 22:21:58

+0

好的thx。我只是想确保我做的是正确的事情:D – 2013-02-22 22:24:58

回答

2

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

+5

'unique_ptr'在这里比'shared_ptr'更有意义,因为不需要共享所有权。 – 2013-02-23 00:01:50