Vector中保存和删除指针数据类型时的tips

   vector中保存类的指针类型时,在使用remove或者erase进行元素的删除时,需要防止内存泄露的发生。一般保存到vector中的元素都是手工new出来的对象,这些对象在必须手工进行销毁以防止内存泄露。
  vector的remove或者erase仅仅是把该指针本身从vector中清除掉,并重新copy剩下的元素生成一个新的vector对象,并不负责对象本身的清除。因此需要使用delete清空。
   若指针类型是基类,那还要为基类定义一个虚拟析构函数 。

#include  < iostream >
#include 
< vector >
#include 
< yut / string .h >

class  A {
    
public:
    A(
int a):a(a){}
    
virtual A::~A(){
        cerr 
<< "222" << endl;
    }

    
int a;
}
;



vector
< *> ::iterator  get (vector < *>   & ss, int  key) {
    vector
<*>::iterator it = ss.begin();
    cerr 
<< "key: " << key << endl;
    cerr 
<< "ss size: " << ss.size() << endl;
    
while(it != ss.end()){
        cerr 
<< "(*it)->a: " << (*it)-><< endl;
        
if((*it)->== key){
            
return it;
        }

        it
++;
    }

    
return ss.end();
}



void  main() {

    vector
<*> a_p;
    
int idx = 10;
    
while(idx > 0){
        A 
* p = new A(idx);
        a_p.push_back(p);
        idx
--;
    }


    
int key = 3;
    vector
<*>::iterator it = get(a_p,3);
    
if(it != a_p.end()){
        delete 
*it;
        a_p.erase(it);
    }
else{
        cerr 
<< "not found" << endl;
    }


}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值