是什么升压智能指针和std智能指针之间的区别?(What is the difference bet

2019-08-02 10:30发布

所以,我想使用智能指针,而不是原料,几乎每一个主题上SO说,大约Boost库。 但性病有这样的事情std::auto_ptrstd::shared_ptr 。 为什么升压? 有什么不同?

这是一个问题不是关于实行差异,但大约理由使用升压指针。 我想,给的答案,包括接听和上下文的日期,是相当有用的。 它有助于理解升压指针是如何加入到性病。

Answer 1:

基本上升压的确shared_ptr第一次。 你可能注意到,许多新的容器类的C ++ 11人升压很久以前。 我希望这种模式继续与C ++标准的下一个版本了。 升压支持旧的C ++编译器不谈论C ++ 11,这是一个很大的好处。

顺便说一下, std::auto_ptr已被弃用在C ++ 11,这使在std::shared_ptrstd::unique_ptr代替,这两者都是显著更为有用。



Answer 2:

也可以看看:

  1. 从标准升压:: shared_ptr的和std :: shared_ptr的之间差<存储器>文件 [StackOverflow的]
  2. 的shared_ptr的不同味道之间的差异 [StackOverflow的]


Answer 3:

那么, 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 ,但也有一些重要的差异,也可参见标准:: 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


文章来源: What is the difference between Boost smart pointers and std smart pointers?