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