【问题标题】:Pointers and containers指针和容器
【发布时间】:2010-09-12 01:46:58
【问题描述】:

我们都知道 RAW 指针需要包装在某种形式的智能指针中才能获得异常安全的内存管理。但是当涉及到指针容器时,问题就变得更加棘手了。

std 容器坚持包含的对象是可复制的,因此这排除了 std::auto_ptr 的使用,尽管您仍然可以使用 boost::shared_ptr 等。

但也有一些 boost 容器专门设计用于安全地保存指针:
Pointer Container Library

问题是: 在什么情况下我应该更喜欢使用 ptr_containers 而不是 smart_pointers 容器?

boost::ptr_vector<X>

or

std::vector<boost::shared_ptr<X> >

【问题讨论】:

    标签: c++ stl containers smart-pointers


    【解决方案1】:

    Boost 指针容器对其拥有的资源拥有严格的所有权。 std::vector<:shared_ptr>> 具有共享所有权。可能有必要这样做是有原因的,但如果不是,我会默认使用 boost::ptr_vector。 YMMV。

    【讨论】:

      【解决方案2】:

      稳住:智能指针是处理资源管理的一种非常好的方法,但不是唯一的方法。我同意您会在编写良好的 C++ 代码中看到很少的原始指针,但根据我的经验,您也不会看到那么多智能指针。有许多使用原始指针容器实现的完全异常安全的类。

      【讨论】:

      • 这是可能的,有时是最好的选择,但如果一个类包含 2 个或更多 RAW 指针,那么使其异常安全就不是小事了。但我应该记下你没有回答这个问题。
      【解决方案3】:

      嗯,开销是一种情况。

      共享指针向量会进行大量无关的复制,包括在调整大小时创建新的智能指针、增加引用、减少引用等。使用指针容器可以避免所有这些。

      需要分析以确保容器操作是瓶颈 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-10
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多