BOOST--智能指针
常用指针
- boost::scoped_ptr
- std::ptr
- std::shared_ptr
- boost::shared_ptr
- boost::shared_array
- boost::weak_ptr
- boost::intrusive_ptr
差异:
boost::scoped_ptr | std::ptr | std::shared_ptr | boost::shared_ptr | boost::shared_array | boost::weak_ptr | boost::intrusive_ptr | |
---|---|---|---|---|---|---|---|
定义位置 | boost/scoped_ptr.hpp | memory | memory | boost/shared_ptr.hpp | boost/shared_array.hpp | boost::weak_ptr | boost/intrusive_ptr.hpp |
是否需要所有权传递 | 否 | 是 | 否(共享) | 否(共享) | 否(共享) | 否(与用来初始化弱指针的共享指针共享所有权) |
boost::scoped_ptr
-
boost::scoped_ptr 的析构函数中使用 delete 操作符来释放所包含的对象。 这对 boost::scoped_ptr 所包含的类型加上了一条重要的限制。 boost::scoped_ptr 不能用动态分配的数组来做初始化,因为这需要调用 delete[] 来释放。 在这种情况下,可以使用boost:scoped_array 类。
-
boost::shared_ptr :所有权可以在boost::shared_ptr之间共享,任何一个共享指针都可以被复制,这和boost::scoped_ptr不一样。
可以在标准容器里存储智能指针(不宝库std::auto_ptr,因为它们在拷贝的时候传递了所有权) -
reset方法:新创建的对象赋值之前会先自动释放当前所包含的对象
boost::weak_ptr
boost::weak_ptr 必定总是通过 boost::shared_ptr 来初始化的。一旦初始化之后,它基本上只提供一个有用的方法: lock()。此方法返回的boost::shared_ptr 与用来初始化弱指针的共享指针共享所有权。 如果这个共享指针不含有任何对象,返回的共享指针也将是空的。
当函数需要一个由共享指针所管理的对象,而这个对象的生存期又不依赖于这个函数时,就可以使用弱指针。 只要程序中还有一个共享指针掌管着这个对象,函数就可以使用该对象。 如果共享指针复位了,就算函数里能得到一个共享指针,对象也不存在了。
弱指针本身对于对象的生存期没有任何影响。