本文共 1271 字,大约阅读时间需要 4 分钟。
标准库中的智能指针: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++ 11Defined inheader.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_ptrshared_ptr和weak_ptr则是C++11从标准库Boost中引入的两种智能指针.shared_ptr用于解决多个指针共享一个对象的问题,但存在循环引用的问题,引入weak_ptr主要用于解决循环引用的问题.boost库中的智能指针:boost::scoped_ptrboost::shared_ptrboost::scoped_arrayboost::shared_arrayboost::weak_ptrboost::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
转载地址:http://dxqzk.baihongyu.com/