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