所以,我想使用智能指针而不是原始的,几乎SO上的每个主题都说Boost库。 但是std有std::auto_ptr和std::shared_ptr之类的东西。
为什么要提升? 有什么不同?
这个问题不是关于实现的差异,而是关于使用Boost指针的原因。 我想,给出答案,包括回答日期和背景,是相当有用的。 它有助于理解如何将Boost指针添加到std。
std :: auto_ptr已弃用btw
C ++ 11中新的智能指针,如std::shared_ptr等(std::auto_ptr除外),是在Boost中具有相同名称的结构之后建模的。
检查您提到的那些SO项目的日期。 去年仅在标准中引入了几个boost智能指针,例如boost::shared_ptr(因此成为std::shared_ptr)。
可能重复不同风格的shared_ptr之间的差异
基本上Boost先做shared_ptr。您可能会注意到C ++ 11中的许??多新容器类很久以前就在Boost中。我希望这种模式能够继续下一次修订C ++标准。 Boost支持那些不讨论C ++ 11的旧C ++编译器,这是一个很大的好处。
顺便说一下,在C ++ 11中不推荐使用std::auto_ptr,它会引入std::shared_ptr和std::unique_ptr,这两者都非常有用。
更具体地说:Boost是一个图书馆游乐场,供作者探索设计空间并用真实用户验证他们的库。 C ++委员会(其中包括许多此类作者)然后进入并标准化了有效的方法。
也可以看看:
boost :: shared_ptr和标准文件中的std :: shared_ptr之间的区别[StackOverflow]
不同风格的shared_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时,新的auto_ptr将指向该对象,旧的指向NULL。另一方面,使用shared_ptr,可以有多个shared_ptr个实例共享同一个对象,只有当最后一个超出范围时,才会删除该对象。
在C ++ 11中有一个与std::auto_ptr类似的指针类型,即std::unique_ptr,但是有一些重要的区别,另见
std :: auto_ptr到std :: unique_ptr。
参考文献:
http://www.cplusplus.com/reference/std/memory/auto_ptr/
http://en.cppreference.com/w/cpp/memory/shared_ptr
http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/shared_ptr.htm
http://en.cppreference.com/w/cpp/memory/unique_ptr