Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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.