Share via


CAutoPtr klas

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Deze klasse vertegenwoordigt een slim aanwijzerobject.

Belangrijk

Deze klasse en de bijbehorende leden kunnen niet worden gebruikt in toepassingen die worden uitgevoerd in Windows Runtime.

Syntaxis

template <typename T>
class CAutoPtr

Parameterwaarden

T
Het type aanwijzer.

Leden

Openbare constructors

Naam Description
CAutoPtr::CAutoPtr De constructor.
CAutoPtr::~CAutoPtr De destructor.

Openbare methoden

Naam Description
CAutoPtr::Attach Roep deze methode aan om eigenaar te worden van een bestaande aanwijzer.
CAutoPtr::Detach Roep deze methode aan om het eigendom van een aanwijzer vrij te geven.
CAutoPtr::Free Roep deze methode aan om een object te verwijderen waarnaar wordt verwezen door een CAutoPtr.

Openbare operators

Naam Description
CAutoPtr::operator T* De cast-operator.
CAutoPtr::operator = De toewijzingsoperator.
CAutoPtr::operator -> De aanwijzer-naar-lid-operator.

Leden van openbare gegevens

Naam Description
CAutoPtr::m_p De gegevenslidvariabele aanwijzer.

Opmerkingen

Deze klasse biedt methoden voor het maken en beheren van een slimme aanwijzer. Slimme aanwijzers helpen beschermen tegen geheugenlekken door resources automatisch vrij te maken wanneer deze buiten het bereik vallen.

CAutoPtrVerder dragen de kopieerconstructor en toewijzingsoperator het eigendom van de aanwijzer over, waarbij de bronpointer naar de doelpointer wordt gekopieerd en de bronpointer wordt ingesteld op NULL. Daarom is het onmogelijk om twee CAutoPtr objecten te hebben die elk dezelfde aanwijzer opslaan en vermindert het de mogelijkheid om dezelfde aanwijzer twee keer te verwijderen.

CAutoPtr vereenvoudigt ook het maken van verzamelingen aanwijzers. In plaats van een verzamelingsklasse af te leiden en de destructor te overschrijven, is het eenvoudiger om een verzameling CAutoPtr objecten te maken. Wanneer de verzameling wordt verwijderd, vallen de CAutoPtr objecten buiten het bereik en worden ze automatisch verwijderd.

CHeapPtr en varianten werken op dezelfde manier als CAutoPtr, behalve dat ze geheugen toewijzen en vrijmaken met behulp van verschillende heap-functies in plaats van de C++ new en delete operators. CAutoVectorPtr is vergelijkbaar met CAutoPtr, het enige verschil is dat het vector new[] en vector delete[] gebruikt om geheugen toe te wijzen en vrij te maken.

Zie ook CAutoPtrArray en CAutoPtrList wanneer matrices of lijsten met slimme aanwijzers vereist zijn.

Requirements

Header: atlbase.h

Example

// 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

Roep deze methode aan om eigenaar te worden van een bestaande aanwijzer.

void Attach(T* p) throw();

Parameterwaarden

p
Het CAutoPtr object wordt eigenaar van deze aanwijzer.

Opmerkingen

Wanneer een CAutoPtr object eigenaar wordt van een aanwijzer, worden de aanwijzer en alle toegewezen gegevens automatisch verwijderd wanneer het buiten het bereik komt. Als CAutoPtr::Detach dit wordt aangeroepen, krijgt de programmeur opnieuw de verantwoordelijkheid voor het vrijmaken van toegewezen resources.

In builds voor foutopsporing treedt er een assertiefout op als het CAutoPtr::m_p gegevenslid momenteel verwijst naar een bestaande waarde. Dat wil zeggen dat deze niet gelijk is aan NULL.

Example

Zie het voorbeeld in het CAutoPtr overzicht.

CAutoPtr::CAutoPtr

De constructor.

CAutoPtr() throw();
explicit CAutoPtr(T* p) throw();

template<typename TSrc>
CAutoPtr(CAutoPtr<TSrc>& p) throw();

template<>
CAutoPtr(CAutoPtr<T>& p) throw();

Parameterwaarden

p
Een bestaande aanwijzer.

TSrc
Het type dat wordt beheerd door een andere CAutoPtr, wordt gebruikt om het huidige object te initialiseren.

Opmerkingen

Het CAutoPtr object kan worden gemaakt met behulp van een bestaande aanwijzer. In dat geval wordt het eigendom van de aanwijzer overgedragen.

Example

Zie het voorbeeld in het CAutoPtr overzicht.

CAutoPtr::~CAutoPtr

De destructor.

~CAutoPtr() throw();

Opmerkingen

Alle toegewezen resources worden vrijgemaakt. Roept CAutoPtr::Free aan.

CAutoPtr::Detach

Roep deze methode aan om het eigendom van een aanwijzer vrij te geven.

T* Detach() throw();

Retourwaarde

Retourneert een kopie van de aanwijzer.

Opmerkingen

Geeft het eigendom van een aanwijzer vrij, stelt de CAutoPtr::m_p gegevenslidvariabele in op NULL en retourneert een kopie van de aanwijzer. Na het aanroepen Detach, is het aan de programmeur om alle toegewezen resources vrij te geven waarvoor het CAutoPtr object eerder verantwoordelijkheid heeft genomen.

Example

Zie het voorbeeld in het CAutoPtr overzicht.

CAutoPtr::Free

Roep deze methode aan om een object te verwijderen waarnaar wordt verwezen door een CAutoPtr.

void Free() throw();

Opmerkingen

Het object waarnaar wordt verwezen door de CAutoPtr is vrijgemaakt en de CAutoPtr::m_p gegevenslidvariabele is ingesteld op NULL.

CAutoPtr::m_p

De gegevenslidvariabele aanwijzer.

T* m_p;

Opmerkingen

Deze lidvariabele bevat de informatie over de aanwijzer.

CAutoPtr::operator =

De toewijzingsoperator.

template<>
CAutoPtr<T>& operator= (CAutoPtr<T>& p);

template<typename TSrc>
CAutoPtr<T>& operator= (CAutoPtr<TSrc>& p);

Parameterwaarden

p
Een aanwijzer.

TSrc
Een klassetype.

Retourwaarde

Retourneert een verwijzing naar een CAutoPtr< T >.

Opmerkingen

De toewijzingsoperator koppelt het CAutoPtr object los van een huidige aanwijzer en koppelt de nieuwe aanwijzer, pop de plaats ervan.

Example

Zie het voorbeeld in het CAutoPtr overzicht.

CAutoPtr::operator ->

De aanwijzer-naar-lid-operator.

T* operator->() const throw();

Retourwaarde

Retourneert de waarde van de CAutoPtr::m_p gegevenslidvariabele.

Opmerkingen

Gebruik deze operator om een methode aan te roepen in een klasse waarnaar wordt verwezen door het CAutoPtr object. In builds voor foutopsporing treedt er een assertiefout op als de CAutoPtr verwijst naar NULL.

Example

Zie het voorbeeld in het CAutoPtr overzicht.

CAutoPtr::operator T*

De cast-operator.

operator T* () const throw();

Retourwaarde

Retourneert een aanwijzer naar het objectgegevenstype dat is gedefinieerd in de klassesjabloon.

Example

Zie het voorbeeld in het CAutoPtr overzicht.

Zie ook

CHeapPtr klas
CAutoVectorPtr klas
Overzicht van klassen