所以,我想使用智能指针,而不是原料,几乎每一个主题上SO说,大约Boost库。 但性病有这样的事情std::auto_ptr
和std::shared_ptr
。 为什么升压? 有什么不同?
这是一个问题不是关于实行差异,但大约理由使用升压指针。 我想,给的答案,包括接听和上下文的日期,是相当有用的。 它有助于理解升压指针是如何加入到性病。
所以,我想使用智能指针,而不是原料,几乎每一个主题上SO说,大约Boost库。 但性病有这样的事情std::auto_ptr
和std::shared_ptr
。 为什么升压? 有什么不同?
这是一个问题不是关于实行差异,但大约理由使用升压指针。 我想,给的答案,包括接听和上下文的日期,是相当有用的。 它有助于理解升压指针是如何加入到性病。
基本上升压的确shared_ptr
第一次。 你可能注意到,许多新的容器类的C ++ 11人升压很久以前。 我希望这种模式继续与C ++标准的下一个版本了。 升压支持旧的C ++编译器不谈论C ++ 11,这是一个很大的好处。
顺便说一下, std::auto_ptr
已被弃用在C ++ 11,这使在std::shared_ptr
和std::unique_ptr
代替,这两者都是显著更为有用。
也可以看看:
那么, 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
,但也有一些重要的差异,也可参见标准:: auto_ptr的到的std ::的unique_ptr 。
参考文献: