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

此外,我知道有std::tr1::shared_ptr。是否有一个类似shared_ptr即在ATL / MFC?

有帮助吗?

解决方案

两者CAutoPtrauto_ptr给你智能指针语义包括所有权语义的转移。 CAutoPtr是一个ATL类 - 使用COM建。这是一个非标准扩展为一个特定的操作系统。在另一方面auto_ptr是标准C ++。如果要使用这样的对象的容器必须使用CAutoPtrArrayCAutoPtrList

要注意的一点是,有一些所谓的auto_ptr_ref,使您可以返回auto_ptrs作为返回值。存在与CAutoPtr没有这样的事情。

auto_ptr是C ++ 0x中弃用。如果你必须使用unique_ptr:您可以在移动感知容器使用他们,同时也得到不安全隐左值的举动一定的安全

其他提示

在最接近于ATL shared_ptr的/ MFC是但是CComPtr。它的目的是要在COM对象使用的,但它可以在包括的AddRef /释放引用计数方法中的任何类使用。

CAutoPtr是ATL特定

STD:auto_ptr的和CAutoPtr既没有提供引用计数。它看起来像都具有相同的功能。链接文本

我想有在ATL / MFC没有shared_ptr的。的shared_ptr在升压库中实现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top