CAutoPtr选件类
此选件类表示智能指针对象。
重要事项 |
---|
此选件类及其成员不能在Windows运行时执行的应用程序。 |
template<
typename T
>
class CAutoPtr
参数
- T
指针类型。
成员
公共构造函数
名称 |
描述 |
---|---|
构造函数。 |
|
该析构函数。 |
公共方法
名称 |
描述 |
---|---|
调用此方法将现有指针的所有权。 |
|
调用此方法释放指针的所有权。 |
|
调用此方法删除点的对象。CAutoPtr。 |
公共运算符
名称 |
描述 |
---|---|
转换运算符。 |
|
赋值运算符。 |
|
指向成员的指针运算符。 |
公共数据成员
名称 |
描述 |
---|---|
指针数据成员变量。 |
备注
此选件类为创建和管理智能指针提供方法,这将有助于防止内存泄漏通过自动释放资源,则应该超出范围时。
此外,CAutoPtr的复制构造函数和赋值运算符调用,复制源指针到目标指针和设置源指针的指针的所有权更改为NULL。有两 CAutoPtr 对象存储同一指针的每个因此是不可能的,这样,减少两次删除同一指针的可能性。
CAutoPtr 还简化指针的集合的创建。而不是派生集合选件类并重写析构函数,较为简单的进行集合 CAutoPtr 对象。在集合中删除,CAutoPtr 对象将超出范围并自动删除它。
CHeapPtr 和变量与 CAutoPtr类似方式工作,不同之处在于,它们分配和释放内存使用不同的堆函数而不是C++ 新建 和 delete 运算符。CAutoVectorPtr 类似于 CAutoPtr,唯一的区别它使用 vector new[] 和 vector delete[] 分配和释放内存。
请参见 CAutoPtrArray 和 CAutoPtrList,当数组或列表智能指针需要。
要求
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;
}