CAutoPtr选件类

此选件类表示智能指针对象。

重要说明重要事项

此选件类及其成员不能在Windows运行时执行的应用程序。

template< 
typename T
>
class CAutoPtr

参数

  • T
    指针类型。

成员

txda4x5t.collapse_all(zh-cn,VS.110).gif公共构造函数

名称

描述

CAutoPtr::CAutoPtr

构造函数。

CAutoPtr::~CAutoPtr

该析构函数。

txda4x5t.collapse_all(zh-cn,VS.110).gif公共方法

名称

描述

CAutoPtr::Attach

调用此方法将现有指针的所有权。

CAutoPtr::Detach

调用此方法释放指针的所有权。

CAutoPtr::Free

调用此方法删除点的对象。CAutoPtr

txda4x5t.collapse_all(zh-cn,VS.110).gif公共运算符

名称

描述

CAutoPtr::operator T*

转换运算符。

CAutoPtr::operator =

赋值运算符。

CAutoPtr::operator - >

指向成员的指针运算符。

txda4x5t.collapse_all(zh-cn,VS.110).gif公共数据成员

名称

描述

CAutoPtr::m_p

指针数据成员变量。

备注

此选件类为创建和管理智能指针提供方法,这将有助于防止内存泄漏通过自动释放资源,则应该超出范围时。

此外,CAutoPtr的复制构造函数和赋值运算符调用,复制源指针到目标指针和设置源指针的指针的所有权更改为NULL。有两 CAutoPtr 对象存储同一指针的每个因此是不可能的,这样,减少两次删除同一指针的可能性。

CAutoPtr 还简化指针的集合的创建。而不是派生集合选件类并重写析构函数,较为简单的进行集合 CAutoPtr 对象。在集合中删除,CAutoPtr 对象将超出范围并自动删除它。

CHeapPtr 和变量与 CAutoPtr类似方式工作,不同之处在于,它们分配和释放内存使用不同的堆函数而不是C++ 新建delete 运算符。CAutoVectorPtr 类似于 CAutoPtr,唯一的区别它使用 vector new[]vector delete[] 分配和释放内存。

请参见 CAutoPtrArrayCAutoPtrList,当数组或列表智能指针需要。

要求

Header: atlbase.h

示例

// A simple class for demonstration purposes

class MyClass 
{
   int iA;
   int iB;
public:
   MyClass(int a, int b);
   void Test();
};

MyClass::MyClass(int a, int b)
{
   iA = a;
   iB = b;
}

void MyClass::Test()
{
   ATLASSERT(iA == iB);
}

// A simple function

void MyFunction(MyClass* c)
{
   c->Test();
}

int UseMyClass()
{
   // Create an object of MyClass.
   MyClass *pMyC = new MyClass(1, 1);

   // Create a CAutoPtr object and have it take
   // over the pMyC pointer by calling Attach.
   CAutoPtr<MyClass> apMyC;
   apMyC.Attach(pMyC);

   // The overloaded -> operator allows the 
   // CAutoPtr object to be used in place of the pointer.
   apMyC->Test();

   // Assign a second CAutoPtr, using the = operator.
   CAutoPtr<MyClass> apMyC2;
   apMyC2 = apMyC;

   // The casting operator allows the
   // object to be used in place of the pointer.
   MyFunction(pMyC);
   MyFunction(apMyC2);

   // Detach breaks the association, so after this
   // call, pMyC is controlled only by apMyC.
   apMyC2.Detach();

   // CAutoPtr destroys any object it controls when it
   // goes out of scope, so apMyC destroys the object 
   // pointed to by pMyC here.
   return 0;
}

请参见

参考

CHeapPtr选件类

CAutoVectorPtr选件类

其他资源

ATL选件类概述