标签:
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.
提供*,->, [](数组对象) 访问操作
标签:
原文地址:http://www.cnblogs.com/xey-csu/p/5468910.html