所以,我想使用智能指针而不是原始指针,并且几乎所有关于 SO 的主题都提到了 Boost 库。但是 std 有 和 之类的std::auto_ptr
东西std::shared_ptr
。为什么要升压?有什么不同?
这不是关于实现差异的问题,而是关于使用 Boost 指针的原因。我想,给定的答案,包括回答日期和上下文,是相当有用的。它有助于理解如何将 Boost 指针添加到 std。
基本上Boostshared_ptr
首先做到了。您可能会注意到 C++11 中的许多新容器类很久以前就在 Boost 中。我希望这种模式在 C++ 标准的下一个修订版中也能继续下去。Boost 支持不支持 C++11 的旧 C++ 编译器,这是一个很大的好处。
顺便说一句,std::auto_ptr
在 C++11 中已弃用,它引入了std::shared_ptr
,std::unique_ptr
相反,它们都更有用。
查看以下 stackoverflow 问题:
嗯,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。
参考: