15

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

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

4

3 回答 3

26

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

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

于 2012-11-07T10:39:07.490 回答
5

查看以下 stackoverflow 问题:

  1. 标准 <memory> 文件中 boost::shared_ptr 和 std::shared_ptr 之间的区别
  2. 不同风格的 shared_ptr 之间的差异
于 2012-11-07T10:48:49.487 回答
4

嗯,std::shared_ptr并且boost:shared_ptr都是引用计数指针。相反 std::auto_ptr 的工作方式非常不同。std::shared_ptr和之间的差异boost: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 到 std::unique_ptr

参考:

于 2012-11-07T10:40:19.863 回答