【智能指针】auto_ptr/shared_ptr/unique_ptr/weak_ptr总结

16.2 智能指针模板类

为什么需要智能指针

img

智能指针是行为类似于指针的类对象,可以解决出现异常时后续delete语句不被执行的问题。

指针是本地变量,在函数终止时本地变量都将从栈内存中被删除,指针本身占据的内存将被释放,但其指向的内存不会。而对象在过期时,可以由类中原本设定的析构函数删除其指向的内存。

智能指针的存活期是代码块,在程序执行完代码块后智能指针就会销毁。

使用智能指针前

void remodel(std::string & str)
{
    std::string * ps=new std::string(str);
    ···
    if(weird_thing())
        throw exception();
    str=*pr;
    delete ps;
    return;
}

使用auto_ptr修改该函数:

#include<memory>
void remodel(std::string & str)
{
    std::auto_ptr<std::string> ps(new std::string(str));
    ···
    if(weird_thing())
        throw exception();
    str=*pr;
    //不需要delete ps;
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值