[1 容器] 7. 如果容器中包含了通过new创建的指针,切记析构前将指针delete掉

下面的代码会导致资源泄漏:

void doSomething()
{
    vector<Widget*> vwp;
    for (int i=0; i<NUMBER; i++) {
        vwp.push_back(new Widget);
    }
    ...
} //Widget泄漏

你希望它们被删除:

void doSomething()
{
    ...
    for (vector<Widget*>::iterator i = vwp.begin(); i!=vwp.end(); i++) {
        delete *i;
    }
}

正常情况下是能删除的,但是这段代码不是异常安全的,如果中间过程有异常抛出,同样会资源泄漏。

最简单的解决方式是用智能指针容器代替指针容器:

void doSomething
{
    typedef boost::shared_ptr<Widget> spw;    //指向Widget的shared_ptr
    vector<spw> vwp;
    for (int i=0; i<NUMBER; i++) {
        vwp.push_back(spw(new Widget));
    }
    ...
} // 不会资源泄漏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值