[英]pointers,deallocation and vector in c++
我想知道我是否应该通过myvector.erase()显式取消分配从向量中删除的指针; 。
例如;
Class Sample1{
public:
removeSample2(Sample2 * a)
{
if(// if i find that a is in my sampleList1 vector with index i ){
// should i call here delete or something like that for a pointer ?
sampleList1.erase(sampleList1.begin()+i);
}
}
private:
vector<Int *> sampleList1;
}
Class Sample2{
public:
// not important areas
private:
Sample1 * example;
}
我们可能无法知道,因为我们不知道您要做什么。 但是基本的答案是:
如果集合在逻辑上拥有其中的东西,则说明您做错了所有事情。 切勿为此目的使用普通指针的普通集合。 例如,如果您复制收藏集,事情将会变得非常糟糕。 (可以使用普通的智能指针集合,也可以使用专门设计用于保存指针并管理其中对象寿命的集合。)
如果集合不拥有其中的所有内容,则不要从集合中delete
指针。 这将导致其他使用这些指针的代码在删除对象后访问该对象。
您应该自己删除该元素。 向量没有分配该元素,因此不会释放它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.