【问题标题】:Difference between ATL CAutoPtr and STL std::auto_ptr?ATL CAutoPtr 和 STL std::auto_ptr 之间的区别?
【发布时间】:2009-03-28 22:02:31
【问题描述】:

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

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

【问题讨论】:

    标签: shared-ptr auto-ptr cautoptr


    【解决方案1】:

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

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

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

    【讨论】:

    • 不错的答案。但是,据我所知,CAutoPtr 与 COM 无关。
    • CAutoPtr 不是特定于操作系统或 COM 的,它是普通的旧 C++。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      CAutoPtr 是 ATL 特定的。

      std:auto_ptr 和 CAutoPtr 都不提供引用计数。看起来两者功能相同。link text

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

      【讨论】:

        猜你喜欢
        • 2014-03-04
        • 2013-01-18
        • 2012-04-25
        • 2015-07-21
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-04
        相关资源
        最近更新 更多