标准库中的智能指针:
std::auto_ptr --single ownership (C++98中出现,缺陷较多,被摒弃)
std::unique_ptr --single ownership (C++11替代std::auto_ptr,用于单线程)
std::shared_ptr --shared ownership (C++11,用于多线程)
std::weak_ptr --temp/no ownership (C++11)
Introduced in C++ 11
Defined in <memory> header.
std::unique_ptr--一般用于单线程
std::shared_ptr--一般用于多线程
C++标准模板库STL 中提供了四种指针 auto_ptr, unique_ptr, shared_ptr, weak_ptr.
(1)auto_ptr&unique_ptr
auto_ptr在 C++98 中提出,但其不能共享对象,不能管理数组指针,也不能放在容器中.因此在 C++11中被
摒弃,并提出unique_ptr来替代,支持管理数组指针,但不能共享对象.
(2)shared_ptr&weak_ptr
shared_ptr和weak_ptr则是C++11从标准库Boost中引入的两种智能指针.
shared_ptr用于解决多个指针共享一个对象的问题,但存在循环引用的问题,引入weak_ptr主要用于解决循
环引用的问题.
boost库中的智能指针:
boost::scoped_ptr
boost::shared_ptr
boost::scoped_array
boost::shared_array
boost::weak_ptr
boost::intrusive_ptr
unique_ptr
持有对对象的独有权——两个unique_ptr不能指向一个对象,即 unique_ptr 不共享它所管理的对象,
它无法复制到其他 unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库
(STL)算法,只能移动 unique_ptr,即对资源管理权限可以实现转移.
shared_ptr
是一个标准的共享所有权的智能指针,允许多个指针指向同一个对象,在使用引用计数的机制上提供
了可以共享所有权的智能指针.
weak_ptr
它不具有普通指针的行为,没有重载 operator* 和 operator->,表明其是功能较弱的
智能指针。它协助 shared_ptr 工作,可获得资源的观测权,像旁观者那样观测资源的使用情况. 观
察者意味着 weak_ptr 只对 shared_ptr 进行引用,而不改变其引用计数,当被观察的 shared_ptr
失效后,相应的 weak_ptr 也相应失效, weak_ptr可用于打破循环引用.引用计数是一种便利的内
存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.
1.std::unique_ptr
2.std::shared_ptr