CAutoPtr Class
Этот класс представляет интеллектуальное объект указателя.
Важно!
Этот класс и его члены нельзя использовать в приложениях, выполняемых в этой среде выполнения Windows.
template<
typename T
>
class CAutoPtr
Параметры
- T
Тип указателя.
Члены
Открытые конструкторы
Имя |
Описание |
---|---|
Конструктор. |
|
Деструктор. |
Открытые методы
Имя |
Описание |
---|---|
Вызовите этот метод, чтобы принять владение существующего указателя. |
|
Этот метод вызывается для освобождения владение указателя. |
|
Вызывайте этот метод для удаления объекта указанный на CAutoPtr. |
Открытые операторы
Имя |
Описание |
---|---|
Оператор приведения. |
|
Оператор присваивания. |
|
Оператор указатель-к- элемента. |
Открытые члены данных
Имя |
Описание |
---|---|
Переменная элемента данных. |
Заметки
Этот класс содержит методы для создания и управления автоматически указатель, который помогает защититься от утечки памяти автоматически освобождение ресурсов при его упадет из области.
Кроме того, конструктор копий CAutoPtr и оператор присваивания указателя, передающих владельца источника при копировании указатель на указатель на указатель источника и назначения параметр в значение NULL. Поэтому невозможно иметь 2 объекта каждое CAutoPtr хранения один указатель, и это уменьшает возможность удаления одной и той же указатель дважды.
CAutoPtr также упрощает создание коллекций указателей. Вместо создания производного класса коллекции и переопределить деструктор, он проще сделать коллекцию объектов CAutoPtr. Если коллекция будет удаляется объекты CAutoPtr пойдут из области и автоматически удаляются.
CHeapPtr и варианты работают точно так же, как CAutoPtr, за исключением того, что они выбирают и освобождает память с помощью различных функций кучи, а не C++ новый и операторов удалить. 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;
}