代码改变世界

auto_ptr scoped_ptr shared_ptr weak_ptr unique_ptr

2012-12-26 14:15  Scott Guthrie Liu  阅读(480)  评论(0编辑  收藏  举报

1. auto_ptr C++98 出现,已经被废了,可以所有权的自动转让,不能作为容器元素。

2. scoped_ptr boost中类似auto_ptr只希望在本作用域里使用,不希望被转让。拷贝构造函数和赋值构造函数都为private。

3. shared_ptr C++11中出现,引用计数型指针,各种赞美啊。make_shared、allocate_shared的使用避免了new泛滥

  实际增加了很小的计数的空间。多线程不完美。

4. weak_ptr被设计为与shared_ptr共同工作,可以从一个shared_ptr或者另一个weak_ptr对象构造,获得资源的观测权。但weak_ptr没有共享资源,它的构造不会引起指针引用计数的增加。同样,在weak_ptr析构时也不会导致引用计数的减少,它只是一个静静的观察者

5. unique_ptr 配合move()使用, 确定只是唯一拥有权时候,使用unique_ptr能够降低相应的性能开销

 

20121226 16:45

个人目前理解,shared_array scoped_array 使用 new[]

这个时候要先看是否设计有问题,尽量用shared_ptr和容器实现