stl智能指针和boost智能指针对比

先说说stl中的智能指针auto_ptr,先说说auto_ptr的特点。std::auto_ptr用来管理单个堆内存对象,但是独享所有权,且不允许赋值和拷贝(没有重载operator=),所以如果在函数内部需要指针时,auto_ptr是一个不错的选择,但需要注意的是它不容许复制,这也就是容器(vector,list等)中的元素类型不能是auto_ptr。一般的用法是
std::auto_ptr<server_t> server = std::auto_ptr<server_t>(new server_t());
再看看boost中的指针。boost中有scoped_ptr、scoped_array、shared_ptr 、shared_array和weak_ptr 这5种类型。
scoped_ptr:scoped_ptr和auto_ptr的特点完全一样。
socped_array:虽然说socped_ptr不能赋值拷贝,但也有用处,但另一缺点是它不能管理数组,很多情况我们都需要在函数内部动态申请内存,等函数返回时释放内存。 socped_array的特点就在于此,它可以管理连续的地址空间,而在离开作用域时自动释放。需要注意的是socped_array仍然不能用于容器或者函数间传递,因为它仍然没有实现计数引用。
shared_ptr:较之于socped_ptr,shared_ptr的特点在于它可以赋值拷贝,内部有一个引用计数器,只有当计数器等于0时才析构内存,它内部重载了=运算符,所以说shared_ptr可用做容器元素,正如名字一样,shared_ptr——共享。

shared_array:可以这么说,shared_array = socped_arrayr + shared_ptr,怎么说呢。。。就是说shared_ptr既可以用来管理连续地址空间,又可以在函数见传递,或者是用于容器中。

week_ptr:shared_ptr的引用技术很好的解决了复制拷贝问题,但是这些都是01问题,要么能拷贝复制,要么不能拷贝复制,那假如我想在有些情况下需要拷贝复制,有些情况下不需要拷贝复制呢?比如说循环引用,再比如说基类中的指针总不能用计数器吧。所以说这就是week_ptr的用处,week_ptr可以对shared_ptr进行引用而不会引起其计数器增加。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值