Destructeurs (C++)
Les fonctions de « destructeur » sont les inverses des fonctions constructeurs. Elles sont appelées lorsque les objets sont détruits (libérés). Désigne une fonction comme un destructeur de classe en faisant précéder le nom de classe par un tilde (~). Par exemple, le destructeur de la classe String est déclaré : ~String().
Dans une compilation /clr, le destructeur a un rôle spécial : libérer les ressources gérées ou non gérées. Consultez Destructeurs et les finaliseurs dans Visual C++ pour plus d'informations.
Exemple
Le destructeur est couramment utilisé pour « nettoyer » lorsqu'un objet n'est plus nécessaire. Prenons les déclarations suivantes d'une classe String :
// spec1_destructors.cpp
#include <string.h>
class String {
public:
String( char *ch ); // Declare constructor
~String(); // and destructor.
private:
char *_text;
size_t sizeOfText;
};
// Define the constructor.
String::String( char *ch ) {
sizeOfText = strlen( ch ) + 1;
// Dynamically allocate the correct amount of memory.
_text = new char[ sizeOfText ];
// If the allocation succeeds, copy the initialization string.
if( _text )
strcpy_s( _text, sizeOfText, ch );
}
// Define the destructor.
String::~String() {
// Deallocate the memory that was previously reserved
// for this string.
if (_text)
delete[] _text;
}
int main() {
String str("The piper in the glen...");
}
Dans l'exemple précédent, le destructeur String::~String utilise l'opérateur delete pour libérer l'espace dynamiquement alloué pour le stockage de texte.