码迷,mamicode.com
首页 > 编程语言 > 详细

C++11 智能指针

时间:2016-05-07 19:38:15      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

1、shard_ptr 

  管理原生指针,可以有多个shard_ptr对同一个指针拥有所有权。当最后一个shard_ptr放弃对该指针的所有权时,通常直接delete掉该指针,但是也可以在构造时指定deleter, 即自定义释放指针的方式。

  shard_ptr放弃对所管理的指针的所有权的情况:1)shard_ptr本身发生析构时,2)通过对shard_ptr赋值或者显示调用reset时

  shard_ptr对象仅能够通过复制对象本身来达到对共享指针的所有权,如果两个shard_ptr使用相同的原生指针构造,寻么它们并不会共享所有权,所管理的指针在释放时就会出问题。

  shard_ptr能够像通常的指针一样使用,支持 * 和->操作,但是为了安全,并不支持指针运算。

  使用shard_ptr管理动态数组时,需要指定删除器,因为shard_ptr的默认删除器不支持数组对象,例子如下:

  shard_ptr<int> p(new int[10], [](int *p) {delete []p;})

2、unique_ptr

  独自占用指针的所有权,不允许其它对象拥有指针的所有权。

  unique_ptr会自动删除所管理的指针,1)unique_ptr对象发生析构,2)发生赋值(move赋值,copy赋值不允许)操作或者显示调用reset.

  提供*,->, [](数组对象) 访问操作

 

C++11 智能指针

标签:

原文地址:http://www.cnblogs.com/xey-csu/p/5468910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!