boost 库的 shared_ptr

     为了管理内存等资源,C++程序员通常采用RAII机制(资源获取即初始化),在使用资源的类的构造函数中申请资源,然后使用,最后在析构函数中释放资源。如果对象是用new 操作符在堆上创建的,那么它的析构函数就不会自动调用,或者因为某些意外如抛出异常而导致程序未能执行delete 语句,那么内存等资源就永久的丢失了。。

 

以上原因就使得" 智能指针"的出现,“智能指针”实现了“设计模式”中的代理模式,在C++ 标准库中出现的auto_ptr 只是部分解决了获取资源自动释放的问题,但auto_ptr 仍有很多的问题,如auto_ptr 的转移语义,使得auto_ptr 无法用于C++的标准容器中。。

     shared_ptr 是一个使用引用计数管理对象的智能指针,当初始化或赋值给一个对象时,引用计数增加1,当引用计数为0时自动释放管理的指针的资源。。

下面是用于容器的例子:

typedef shared_ptr<string> sp_t;
map<sp_t,int> m;  //标准映射容器
sp_t sp(new string("edward"));
m[sp]=111;

在编写基于虚函数的多态代码时指针的类型转换时很有用,下面的代码使用dynamic_pointer_cast 把一个shared_ptr<std::exception> 向下转型为一个shared_ptr<bad_exception>,然后又用static_pointer_cast重新转为shared_ptr<std::exception>:

shared_ptr<std::exception> sp1(new bad_exception("error"));
shared_ptr<bad_exception> sp2=dynamic_point_cast<bad_exception>(sp1);
shared_ptr<std::exception> sp3=static_pointer_cast<std::exception>(sp2);
assert(sp3==sp1);


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值