【问题标题】:Boost smart pointers增强智能指针
【发布时间】:2011-07-08 22:48:18
【问题描述】:

什么时候应该使用 intrusive_ptr 而不是 shared_ptr ?

【问题讨论】:

标签: c++ boost


【解决方案1】:

当您已经在指向的对象中存储了一个引用计数器时。

【讨论】:

    【解决方案2】:

    超越 C++ 标准库:Boost 简介 比约恩·卡尔森

    在大多数情况下,您不应该使用 boost::intrusive_ptr,因为共享所有权的功能在 boost::shared_ptr 中很容易获得,并且非侵入式智能指针比侵入式智能指针更灵活。但是,有时需要一个侵入式引用计数,可能是用于遗留代码或与第三方类集成。当需要时,intrusive_ptr 符合要求,与其他 Boost 智能指针类具有相同的语义。

    通过使用另一个 Boost 智能指针,您可以确保为所有智能指针需求提供一致的接口,无论它们是否具有侵入性。引用计数必须由与 intrusive_ptr 一起使用的类提供。 intrusive_ptr 通过对两个函数 intrusive_ptr_add_ref 和 intrusive_ptr_release 进行非限定调用来管理引用计数;这些函数必须正确操作侵入引用计数才能使 intrusive_ptrs 正常工作。对于要与 intrusive_ptr 一起使用的类型中已经存在引用计数的所有情况,启用对 intrusive_ptr 的支持就像实现这两个函数一样容易。

    使用 intrusive_ptr 时

    • 您需要将此视为智能指针。
    • 存在使用或提供侵入性引用计数的现有代码。
    • 智能指针的大小必须等于原始指针的大小。

    【讨论】:

      【解决方案3】:

      尼克说的。一个真实的例子是管理 COM 指针。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 2016-10-09
        • 1970-01-01
        • 2021-11-28
        • 2020-07-10
        • 1970-01-01
        相关资源
        最近更新 更多