BOOST--智能指针相关

本文详细介绍了Boost库和C++标准库中的智能指针类型,包括boost::scoped_ptr、std::shared_ptr、boost::shared_ptr等,对比了它们的定义位置、所有权传递方式及适用场景。同时,探讨了智能指针在标准容器中的存储、reset方法的使用,以及boost::weak_ptr的初始化和lock方法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用指针

  • boost::scoped_ptr
  • std::ptr
  • std::shared_ptr
  • boost::shared_ptr
  • boost::shared_array
  • boost::weak_ptr
  • boost::intrusive_ptr

差异:

boost::scoped_ptrstd::ptrstd::shared_ptrboost::shared_ptrboost::shared_arrayboost::weak_ptrboost::intrusive_ptr
定义位置boost/scoped_ptr.hppmemorymemoryboost/shared_ptr.hppboost/shared_array.hppboost::weak_ptrboost/intrusive_ptr.hpp
是否需要所有权传递否(共享)否(共享)否(共享)否(与用来初始化弱指针的共享指针共享所有权)

boost::scoped_ptr

  1. boost::scoped_ptr 的析构函数中使用 delete 操作符来释放所包含的对象。 这对 boost::scoped_ptr 所包含的类型加上了一条重要的限制。 boost::scoped_ptr 不能用动态分配的数组来做初始化,因为这需要调用 delete[] 来释放。 在这种情况下,可以使用boost:scoped_array 类。

  2. boost::shared_ptr :所有权可以在boost::shared_ptr之间共享,任何一个共享指针都可以被复制,这和boost::scoped_ptr不一样。
    可以在标准容器里存储智能指针(不宝库std::auto_ptr,因为它们在拷贝的时候传递了所有权)

  3. reset方法:新创建的对象赋值之前会先自动释放当前所包含的对象

boost::weak_ptr

boost::weak_ptr 必定总是通过 boost::shared_ptr 来初始化的。一旦初始化之后它基本上只提供一个有用的方法: lock()。此方法返回的boost::shared_ptr 与用来初始化弱指针的共享指针共享所有权。 如果这个共享指针不含有任何对象,返回的共享指针也将是空的。

当函数需要一个由共享指针所管理的对象,而这个对象的生存期又不依赖于这个函数时,就可以使用弱指针。 只要程序中还有一个共享指针掌管着这个对象,函数就可以使用该对象。 如果共享指针复位了,就算函数里能得到一个共享指针,对象也不存在了。

弱指针本身对于对象的生存期没有任何影响。

参考资料:http://zh.highscore.de/cpp/boost/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值