Класс CAutoPtr
Этот класс представляет объект интеллектуального указателя.
Внимание
Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения 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. Поэтому невозможно иметь два CAutoPtr
объекта, хранящие один и тот же указатель, и это уменьшает возможность удаления одного указателя дважды.
CAutoPtr
также упрощает создание коллекций указателей. Вместо создания класса коллекции и переопределения деструктора проще сделать коллекцию CAutoPtr
объектов. При удалении CAutoPtr
коллекции объекты выходят из области и автоматически удаляются.
CHeapPtr
и варианты работают так же, как CAutoPtr
и , за исключением того, что они выделяют и освобождают память с помощью разных функций кучи вместо C++ new
и delete
операторов. CAutoVectorPtr
аналогичноCAutoPtr
, единственное различие заключается в том, что он использует вектор new[] и vector delete[] для выделения и свободного памяти.
См. также CAutoPtrArray
и CAutoPtrList
сведения о необходимых массивах или списках смарт-указателей.
Требования
Заголовок: 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;
}
CAutoPtr::Attach
Вызовите этот метод для владения существующим указателем.
void Attach(T* p) throw();
Параметры
p
Объект CAutoPtr
будет иметь владение этим указателем.
Замечания
CAutoPtr
Когда объект берет на себя владение указателем, он автоматически удаляет указатель и все выделенные данные при выходе из области. При CAutoPtr::Detach
вызове программист снова несет ответственность за освобождение выделенных ресурсов.
В сборках отладки произойдет сбой утверждения, если CAutoPtr::m_p
член данных в настоящее время указывает на существующее значение, то есть не равно NULL.
Пример
См. пример в обзореCAutoPtr
.
CAutoPtr::CAutoPtr
Конструктор.
CAutoPtr() throw();
explicit CAutoPtr(T* p) throw();
template<typename TSrc>
CAutoPtr(CAutoPtr<TSrc>& p) throw();
template<>
CAutoPtr(CAutoPtr<T>& p) throw();
Параметры
p
Существующий указатель.
TSrc
Тип, управляемый другим CAutoPtr
, используемый для инициализации текущего объекта.
Замечания
Объект CAutoPtr
можно создать с помощью существующего указателя, в этом случае он передает права владения указателем.
Пример
См. пример в обзореCAutoPtr
.
CAutoPtr::~CAutoPtr
Деструктор
~CAutoPtr() throw();
Замечания
Освобождает все выделенные ресурсы. Вызывает CAutoPtr::Free
.
CAutoPtr::Detach
Вызовите этот метод, чтобы освободить владение указателем.
T* Detach() throw();
Возвращаемое значение
Возвращает копию указателя.
Замечания
Освобождает владение указателем, задает CAutoPtr::m_p
переменную члена данных значение NULL и возвращает копию указателя. После вызова Detach
программист должен освободить все выделенные ресурсы, над которым CAutoPtr
объект мог ранее нести ответственность.
Пример
См. пример в обзореCAutoPtr
.
CAutoPtr::Free
Вызовите этот метод для удаления объекта, на который указывает объект CAutoPtr
.
void Free() throw();
Замечания
Объект, на который указывает CAutoPtr
освобожден, и CAutoPtr::m_p
переменная члена данных имеет значение NULL.
CAutoPtr::m_p
Переменная элемента данных указателя.
T* m_p;
Замечания
Эта переменная-член содержит сведения указателя.
CAutoPtr::operator =
Оператор присваивания .
template<>
CAutoPtr<T>& operator= (CAutoPtr<T>& p);
template<typename TSrc>
CAutoPtr<T>& operator= (CAutoPtr<TSrc>& p);
Параметры
p
Указатель.
TSrc
Тип класса.
Возвращаемое значение
Возвращает ссылку на объект CAutoPtr< T >
.
Замечания
Оператор присваивания отсоединяет CAutoPtr
объект от любого текущего указателя и присоединяет новый указатель на p
его место.
Пример
См. пример в обзореCAutoPtr
.
CAutoPtr::operator ->
Оператор указателя на член.
T* operator->() const throw();
Возвращаемое значение
Возвращает значение переменной CAutoPtr::m_p
члена данных.
Замечания
Этот оператор используется для вызова метода в классе, на который указывает CAutoPtr
объект. В отладочных сборках происходит сбой утверждения, если CAutoPtr
указывает на ЗНАЧЕНИЕ NULL.
Пример
См. пример в обзореCAutoPtr
.
CAutoPtr::operator T*
Оператор приведения.
operator T* () const throw();
Возвращаемое значение
Возвращает указатель на тип данных объекта, определенный в шаблоне класса.
Пример
См. пример в обзореCAutoPtr
.