在指针向量中删除元素

3

我只想确认一下,对于一个指向该对象的向量中存在元素的情况下,删除已分配内存的正确方法是否如下:

vector<Fruit*> temp;

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

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

这样对吗?谢谢


8
可以。或者只需delete temp[5]; temp.erase(temp.begin() + 5); - Kerrek SB
好的,谢谢。我只是想确保我做正确的事情:D - Nick Stov
1个回答

2
克里克的建议当然没问题:

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و›´هگˆé€‚,ه› ن¸؛ن¸چ需è¦په…±ن؛«و‰€وœ‰و‌ƒم€‚ - Jon Purdy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接