Boost智能指针和std智能指针之间有什么区别?

16

所以,我希望使用智能指针而不是裸指针,几乎所有与此相关的主题都提到了Boost库。但std有诸如std::auto_ptrstd::shared_ptr之类的东西。

为什么要使用Boost?它们有什么区别吗?

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


1
std::auto_ptr已经被弃用了。 - Denis Ermolin
新的智能指针,例如C++11中的std::shared_ptr等(除了std::auto_ptr)是模仿Boost中同名结构而设计的。 - Some programmer dude
1
请检查您提到的那些 SO 项目的日期。几个 boost 智能指针,例如 boost::shared_ptr,仅在去年成为标准(因此成为 std::shared_ptr)。 - Gorpik
可能是Differences between different flavours of shared_ptr的重复问题。 - Trevor Boyd Smith
3个回答

27

基本上,Boost先引入了shared_ptr。你可能会注意到,在C++11中的许多新容器类在很久以前就出现在Boost中了。我预计这种模式也将延续到C++标准的下一次修订中。Boost支持旧的C++编译器,这些编译器不支持C++11,这是一个重大的优势。

顺便说一下,std::auto_ptr已经在C++11中被废弃,取而代之的是std::shared_ptrstd::unique_ptr,它们都更加实用。


4
更具体地说,Boost 是一个供作者探索设计空间并与真实用户验证其库的库试验场。然后 C++ 委员会(其中有许多这样的作者)介入并标准化成功的内容。 - Matthieu M.


4
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时,新的auto_ptr将指向该对象,而旧的auto_ptr将指向NULL。另一方面,对于shared_ptr,可以有多个shared_ptr实例共享同一个对象,只有最后一个实例超出范围时,才会删除该对象。
在C++11中,有一种类似于std::auto_ptr的指针类型,即std::unique_ptr,但有一些重要的区别,请参见std::auto_ptr to std::unique_ptr
参考资料:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接