首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost智能指针和std智能指针有什么区别?

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

Stack Overflow用户
提问于 2012-11-07 18:36:27
回答 3查看 8.6K关注 0票数 14

所以,我想使用智能指针而不是raw,几乎所有关于Boost库的话题都这么说。但是性传播疾病有像std::auto_ptrstd::shared_ptr这样的东西。为什么选择Boost?有什么关系?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-07 18:39:07

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

顺便说一句,C++11中不推荐使用std::auto_ptr,而是引入了std::shared_ptrstd::unique_ptr,这两种语言的用处要大得多。

票数 26
EN

Stack Overflow用户

发布于 2012-11-07 18:48:49

Stack Overflow用户

发布于 2012-11-07 18:40:20

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实例共享同一对象,只有当最后一个实例超出范围时,该对象才会被删除。

在C++11中,有一种类似于std::auto_ptr的指针类型,即std::unique_ptr,但有一些重要的区别,另请参阅std::auto_ptr to 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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13267908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档