Classe CAutoPtr
Cette classe représente un objet pointeur intelligent.
Important
Cette classe et ses membres ne peuvent pas être utilisés dans les applications qui s’exécutent dans Windows Runtime.
Syntaxe
template <typename T>
class CAutoPtr
Paramètres
T
Type de pointeur.
Membres
Constructeurs publics
Nom | Description |
---|---|
CAutoPtr::CAutoPtr |
Constructeur . |
CAutoPtr::~CAutoPtr |
Destructeur. |
Méthodes publiques
Nom | Description |
---|---|
CAutoPtr::Attach |
Appelez cette méthode pour prendre possession d’un pointeur existant. |
CAutoPtr::Detach |
Appelez cette méthode pour libérer la propriété d’un pointeur. |
CAutoPtr::Free |
Appelez cette méthode pour supprimer un objet pointé par un CAutoPtr . |
Opérateurs publics
Nom | Description |
---|---|
CAutoPtr::operator T* |
Opérateur de cast. |
CAutoPtr::operator = |
Opérateur d’assignation . |
CAutoPtr::operator -> |
Opérateur pointeur à membre. |
Membres de données publiques
Nom | Description |
---|---|
CAutoPtr::m_p |
Variable membre de données du pointeur. |
Notes
Cette classe fournit des méthodes pour créer et gérer un pointeur intelligent. Les pointeurs intelligents aident à se protéger contre les fuites de mémoire en libérant automatiquement les ressources lorsqu’elles tombent hors de portée.
De plus, CAutoPtr
le constructeur de copie et l’opérateur d’affectation transfèrent la propriété du pointeur, en copiant le pointeur source vers le pointeur de destination et en définissant le pointeur source sur NULL. C’est pourquoi il est impossible d’avoir deux CAutoPtr
objets qui stockent chacun le même pointeur, ce qui réduit la possibilité de supprimer le même pointeur deux fois.
CAutoPtr
simplifie également la création de collections de pointeurs. Au lieu de dériver une classe de collection et de remplacer le destructeur, il est plus simple de créer une collection d’objets CAutoPtr
. Lorsque la collection est supprimée, les CAutoPtr
objets sortent de l’étendue et se suppriment automatiquement.
CHeapPtr
et les variantes fonctionnent de la même façon que CAutoPtr
, sauf qu’elles allouent et libèrent de la mémoire à l’aide de différentes fonctions de tas au lieu des opérateurs et delete
C++new
. CAutoVectorPtr
est similaire à CAutoPtr
, la seule différence étant qu’elle utilise le vecteur nouveau[] et la suppression de vecteur[] pour allouer et libérer de la mémoire.
Consultez également et CAutoPtrArray
CAutoPtrList
quand des tableaux ou des listes de pointeurs intelligents sont nécessaires.
Spécifications
En-tête : atlbase.h
Exemple
// 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
Appelez cette méthode pour prendre possession d’un pointeur existant.
void Attach(T* p) throw();
Paramètres
p
L’objet CAutoPtr
prend possession de ce pointeur.
Notes
Lorsqu’un CAutoPtr
objet prend possession d’un pointeur, il supprime automatiquement le pointeur et toutes les données allouées lorsqu’il sort de l’étendue. S’il CAutoPtr::Detach
est appelé, le programmeur est de nouveau chargé de libérer les ressources allouées.
Dans les builds de débogage, une défaillance d’assertion se produit si le CAutoPtr::m_p
membre de données pointe actuellement vers une valeur existante ; autrement dit, elle n’est pas égale à NULL.
Exemple
Consultez l’exemple dans la vue d’ensembleCAutoPtr
.
CAutoPtr::CAutoPtr
Constructeur .
CAutoPtr() throw();
explicit CAutoPtr(T* p) throw();
template<typename TSrc>
CAutoPtr(CAutoPtr<TSrc>& p) throw();
template<>
CAutoPtr(CAutoPtr<T>& p) throw();
Paramètres
p
Pointeur existant.
TSrc
Type géré par un autre CAutoPtr
, utilisé pour initialiser l’objet actuel.
Notes
L’objet CAutoPtr
peut être créé à l’aide d’un pointeur existant, auquel cas il transfère la propriété du pointeur.
Exemple
Consultez l’exemple dans la vue d’ensembleCAutoPtr
.
CAutoPtr::~CAutoPtr
Destructeur.
~CAutoPtr() throw();
Notes
Libère toutes les ressources allouées. Appelle CAutoPtr::Free
.
CAutoPtr::Detach
Appelez cette méthode pour libérer la propriété d’un pointeur.
T* Detach() throw();
Valeur retournée
Retourne une copie du pointeur.
Notes
Libère la propriété d’un pointeur, définit la CAutoPtr::m_p
variable membre de données sur NULL et retourne une copie du pointeur. Après l’appel Detach
, il incombe au programmeur de libérer toutes les ressources allouées sur lesquelles l’objet peut avoir précédemment assumé la CAutoPtr
responsabilité.
Exemple
Consultez l’exemple dans la vue d’ensembleCAutoPtr
.
CAutoPtr::Free
Appelez cette méthode pour supprimer un objet pointé par un CAutoPtr
.
void Free() throw();
Notes
L’objet pointé par l’objet CAutoPtr
est libéré et la CAutoPtr::m_p
variable membre de données a la valeur NULL.
CAutoPtr::m_p
Variable membre de données du pointeur.
T* m_p;
Notes
Cette variable membre contient les informations de pointeur.
CAutoPtr::operator =
Opérateur d’assignation .
template<>
CAutoPtr<T>& operator= (CAutoPtr<T>& p);
template<typename TSrc>
CAutoPtr<T>& operator= (CAutoPtr<TSrc>& p);
Paramètres
p
Pointeur.
TSrc
Type de classe.
Valeur retournée
Retourne une référence à un CAutoPtr< T >
.
Notes
L’opérateur d’affectation détache l’objet CAutoPtr
de n’importe quel pointeur actuel et attache le nouveau pointeur, p
à sa place.
Exemple
Consultez l’exemple dans la vue d’ensembleCAutoPtr
.
CAutoPtr::operator ->
Opérateur pointeur à membre.
T* operator->() const throw();
Valeur retournée
Retourne la valeur de la CAutoPtr::m_p
variable membre de données.
Notes
Utilisez cet opérateur pour appeler une méthode dans une classe pointée par l’objet CAutoPtr
. Dans les builds de débogage, une défaillance d’assertion se produit si les CAutoPtr
points ont la valeur NULL.
Exemple
Consultez l’exemple dans la vue d’ensembleCAutoPtr
.
CAutoPtr::operator T*
Opérateur de cast.
operator T* () const throw();
Valeur retournée
Retourne un pointeur vers le type de données d’objet défini dans le modèle de classe.
Exemple
Consultez l’exemple dans la vue d’ensembleCAutoPtr
.
Voir aussi
CHeapPtr
, classe
CAutoVectorPtr
, classe
Vue d’ensemble de la classe