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

时间:2012-11-07 10:36:27

标签: c++ pointers boost std

所以,我想使用智能指针而不是原始的,几乎SO上的每个主题都说关于Boost库。但是std有std::auto_ptrstd::shared_ptr之类的东西。 为什么要提升?有什么区别?

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

3 个答案:

答案 0 :(得分:20)

Boost基本上先shared_ptr做了std::auto_ptr。您可能会注意到C ++ 11中的许​​多新容器类很久以前就在Boost中。我希望这种模式能够继续下一次修订C ++标准。 Boost支持那些不讨论C ++ 11的旧C ++编译器,这是一个很大的好处。

顺便说一句,在{+ 1}}中不推荐使用std::shared_ptr,而是引入std::unique_ptr和{{1}},这些都非常有用。

答案 1 :(得分:5)

答案 2 :(得分: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时,新的NULL将指向该对象,旧的指向shared_ptr。另一方面,shared_ptr可以有多个std::auto_ptr实例共享同一个对象,只有当最后一个超出范围时,才会删除该对象。

在C ++ 11中,有一个与std::unique_ptr类似的指针类型,即{{1}},但是有一些重要的区别,另见 std::auto_ptr to std::unique_ptr

参考文献: