Поделиться через


CAutoPtr Class

Этот класс представляет интеллектуальное объект указателя.

Важно!

Этот класс и его члены нельзя использовать в приложениях, выполняемых в этой среде выполнения Windows.

template< 
typename T 
> 
class CAutoPtr

Параметры

  • T
    Тип указателя.

Члены

Открытые конструкторы

Имя

Описание

CAutoPtr::CAutoPtr

Конструктор.

CAutoPtr::~CAutoPtr

Деструктор.

Открытые методы

Имя

Описание

CAutoPtr::Attach

Вызовите этот метод, чтобы принять владение существующего указателя.

CAutoPtr::Detach

Этот метод вызывается для освобождения владение указателя.

CAutoPtr::Free

Вызывайте этот метод для удаления объекта указанный на CAutoPtr.

Открытые операторы

Имя

Описание

CAutoPtr::operator T*

Оператор приведения.

CAutoPtr::operator =

Оператор присваивания.

CAutoPtr::operator ->

Оператор указатель-к- элемента.

Открытые члены данных

Имя

Описание

CAutoPtr::m_p

Переменная элемента данных.

Заметки

Этот класс содержит методы для создания и управления автоматически указатель, который помогает защититься от утечки памяти автоматически освобождение ресурсов при его упадет из области.

Кроме того, конструктор копий 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;
}

См. также

Ссылки

CHeapPtr Class

CAutoVectorPtr Class

Другие ресурсы

ATL Class Overview