Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс
Замечание
Библиотека активных шаблонов (ATL) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
Этот класс представляет объект интеллектуального указателя.
Внимание
Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения 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.