我在MFC中编写了一些代码,我想使用自动指针。我遇到过两个不同的类,它们看起来像做同样的事情:CAutoPtr
和std::auto_ptr
人们对这两种不同的实现有什么看法?
此外,我知道有std::tr1::shared_ptr
。在ATL / MFC中是否有类似的shared_ptr
?
答案 0 :(得分:2)
CAutoPtr
和auto_ptr
都为您提供智能指针语义,包括所有权语义转移。 CAutoPtr
是一个ATL类 - 使用COM构建。它是特定操作系统的非标准扩展。另一方面,auto_ptr
是标准C ++。如果您想使用此类对象的容器,则必须使用CAutoPtrArray
或CAutoPtrList
。
需要注意的一点是,有一个名为auto_ptr_ref
的东西允许您返回auto_ptr
作为返回值。 CAutoPtr
没有这样的事情。
auto_ptr
。如果必须,请使用unique_ptr
:您可以在移动感知容器中使用它们,并从l值的不安全隐式移动中获得安全性。
答案 1 :(得分:1)
最接近ATL / MFC中shared_ptr的是CComPtr。它适用于COM对象,但它可以用于包含AddRef / Release引用计数方法的任何类。
答案 2 :(得分:0)
CAutoPtr特定于ATL。
std:auto_ptr和CAutoPtr都不提供引用计数。看起来两者具有相同的功能。link text
我猜ATL / MFC中没有shared_ptr。 shared_ptr在boost库中实现。