【问题标题】:What is the difference between Boost smart pointers and std smart pointers?Boost智能指针和std智能指针有什么区别?
【发布时间】:2012-11-07 10:36:26
【问题描述】:

所以,我想使用智能指针而不是原始指针,并且几乎所有关于 SO 的主题都提到了 Boost 库。但是 std 有 std::auto_ptrstd::shared_ptr 这样的东西。 为什么要升压?有什么区别?

这不是关于实现差异的问题,而是关于使用 Boost 指针的原因。我想,给定的答案,包括回答日期和上下文,是相当有用的。它有助于理解如何将 Boost 指针添加到 std。

【问题讨论】:

  • std::auto_ptr 顺便说一句已被弃用
  • 新的智能指针,如 C++11 中的std::shared_ptr 等(std::auto_ptr 除外)是根据 Boost 中的同名结构建模的。
  • 检查您提到的那些 SO 项目的日期。去年才在标准中引入了几个boost 智能指针,例如boost::shared_ptr(因此成为std::shared_ptr)。

标签: c++ pointers boost std


【解决方案1】:

基本上 Boost 首先是 shared_ptr。您可能会注意到 C++11 中的许多新容器类很久以前就在 Boost 中。我希望这种模式在 C++ 标准的下一个修订版中也能继续。 Boost 支持不支持 C++11 的旧 C++ 编译器,这是一个很大的好处。

顺便说一句,std::auto_ptr 在 C++11 中已被弃用,而是引入了 std::shared_ptrstd::unique_ptr,它们都更加有用。

【讨论】:

  • 更具体地说:Boost 是一个库游乐场,供作者探索设计空间并与真实用户验证他们的库。 C++ 委员会(其中有许多这样的作者)随后介入并标准化了有效的方法。
【解决方案2】:
【解决方案3】:

嗯,std::shared_ptrboost:shared_ptr 都是引用计数指针。相反 std::auto_ptr 的工作方式非常不同。 std::shared_ptrboost:shared_ptr 之间的差异非常小,而且主要是历史性的。在 C++11 之前,没有 std::shared_ptr,只有 boost:shared_ptr。在设计 C++11 时,他们以boost:shared_ptr 为模型。

您提到的所有智能指针的共同点是它们都有自己的机制来确保正确完成点的生命周期管理。 auto_ptr 的作用是,如果您有多个 auto_ptr 实例,那么其中只有一个包含指向真实对象的指针。每当您从另一个auto_ptr 创建auto_ptr 时,新的将指向该对象,而旧的将指向NULL。另一方面,shared_ptr 可以有多个 shared_ptr 实例共享同一个对象,只有当最后一个超出范围时,才会删除该对象..

在 C++11 中有一个与 std::auto_ptr 类似的指针类型,即 std::unique_ptr,但有一些重要的区别,另请参阅 std::auto_ptr to std::unique_ptr.

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多