ATL CAutoPtr和STL std :: auto_ptr之间的区别?

时间:2009-03-28 22:02:31

标签: shared-ptr auto-ptr cautoptr

我在MFC中编写了一些代码,我想使用自动指针。我遇到过两个不同的类,它们看起来像做同样的事情:CAutoPtrstd::auto_ptr人们对这两种不同的实现有什么看法?

此外,我知道有std::tr1::shared_ptr。在ATL / MFC中是否有类似的shared_ptr

3 个答案:

答案 0 :(得分:2)

CAutoPtrauto_ptr都为您提供智能指针语义,包括所有权语义转移。 CAutoPtr是一个ATL类 - 使用COM构建。它是特定操作系统的非标准扩展。另一方面,auto_ptr是标准C ++。如果您想使用此类对象的容器,则必须使用CAutoPtrArrayCAutoPtrList

需要注意的一点是,有一个名为auto_ptr_ref的东西允许您返回auto_ptr作为返回值。 CAutoPtr没有这样的事情。

在C ++ 0x中不推荐使用

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库中实现。