所以,我想使用智能指针而不是raw,几乎所有关于Boost库的话题都这么说。但是性传播疾病有像std::auto_ptr和std::shared_ptr这样的东西。为什么选择Boost?有什么关系?
这不是一个关于实现差异的问题,而是关于使用Boost指针的原因的问题。我认为,给定的答案,包括回答的日期和上下文,是相当有用的。它有助于理解Boost指针是如何添加到std中的。
发布于 2012-11-07 18:39:07
基本上Boost是先做shared_ptr的。您可能注意到,C++11中的许多新容器类很久以前就在Boost中了。我希望在C++标准的下一个修订版中也会继续使用这种模式。Boost支持不使用C++11的旧版C++编译器,这是一个很大的好处。
顺便说一句,C++11中不推荐使用std::auto_ptr,而是引入了std::shared_ptr和std::unique_ptr,这两种语言的用处要大得多。
发布于 2012-11-07 18:48:49
发布于 2012-11-07 18:40:20
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 to std::unique_ptr。
参考文献:
https://stackoverflow.com/questions/13267908
复制相似问题