所以,我想使用智能指针而不是原始的,几乎SO上的每个主题都说关于Boost库。但是std有std::auto_ptr
和std::shared_ptr
之类的东西。
为什么要提升?有什么区别?
这个问题不是关于实现的差异,而是关于使用Boost指针的原因。我想,给出答案,包括回答日期和背景,是相当有用的。它有助于理解如何将Boost指针添加到std。
答案 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_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
可以有多个std::auto_ptr
实例共享同一个对象,只有当最后一个超出范围时,才会删除该对象。
在C ++ 11中,有一个与std::unique_ptr
类似的指针类型,即{{1}},但是有一些重要的区别,另见
std::auto_ptr to std::unique_ptr
参考文献: