1

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

此外,我知道有std::tr1::shared_ptr. shared_ptrATL/MFC 中有类似的吗?

4

3 回答 3

2

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

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

auto_ptr在 C++0x 中已弃用。必要时使用unique_ptr:您可以在移动感知容器中使用它们,并且还可以从不安全的 l 值隐式移动中获得一些安全性。

于 2009-03-28T22:18:36.513 回答
1

在 ATL/MFC 中最接近 shared_ptr 的是 CComPtr。它旨在用于 COM 对象,但它可以用于任何包含 AddRef/Release 引用计数方法的类。

于 2009-03-28T22:44:37.153 回答
0

CAutoPtr 是 ATL 特定的。

std:auto_ptr 和 CAutoPtr 都不提供引用计数。看起来两者具有相同的功能。链接文本

我猜 ATL/MFC 中没有 shared_ptr 。shared_ptr 在 boost 库中实现。

于 2009-03-28T22:24:51.367 回答