Introduction à Destructor en C ++

Comme nous le savons tous, C ++ est un langage de programmation orienté objet et est largement utilisé dans les industries informatiques pour le développement de logiciels, de pilotes, de micrologiciels intégrés et d'applications client-serveur. Il s'agit d'un langage de niveau intermédiaire encapsulant les fonctionnalités d'un langage de haut niveau et de bas niveau. Il a un concept de classes et d'objets. En C ++, les constructeurs jouent un rôle important dans la création d'un objet et l'initialisation des variables d'instance, mais qu'advient-il de ces objets et ressources une fois qu'ils ne sont plus utilisés ou que le programme se termine? Cette responsabilité est prise en charge par les destructeurs en C ++. Les destructeurs sont utilisés pour détruire les objets créés par les constructeurs lorsqu'ils ne sont plus nécessaires pour libérer la mémoire. Ce sont des fonctions membres spéciales et appelées automatiquement par C ++. compilateur pour libérer de la mémoire lorsqu'il n'y a pas de destructeur défini par l'utilisateur dans le programme. Comme les constructeurs, les destructeurs ont également le même nom que classe précédé d'un signe tilde (~). Mais le destructeur n'accepte aucun argument / paramètre et ne renvoie rien, c'est-à-dire qu'il n'a pas de type de retour.

Les destructeurs ne peuvent jamais être surchargés comme les constructeurs d'une classe. Vous trouverez ci-dessous certaines des situations dans lesquelles le destructeur est appelé automatiquement par le compilateur:

  • Lorsqu'un opérateur de suppression est appelé.
  • Lorsque l'exécution du programme est terminée.
  • Lorsque le bloc / la portée des variables locales se termine.

Un programmeur peut définir un destructeur connu sous le nom de constructeur conçu par l'utilisateur. Un destructeur peut être déclaré virtuel ou virtuel pur mais ne peut pas être déclaré const, volatile, const volatile ou statique.

Comment Destructor fonctionne-t-il en C ++?

Pour le fonctionnement du destructeur, les points mentionnés ci-dessous doivent être gardés à l'esprit:

  • Les destructeurs d'objets de classe sont appelés d'abord avant d'appeler le destructeur des membres et des bases. Les destructeurs de la classe de base non virtuelle sont appelés avant les destructeurs de la classe de base virtuelle.
  • Avant les classes de base, le destructeur des membres non statiques est appelé. Les destructeurs des classes de base virtuelles et non virtuelles sont appelés dans l'ordre inverse de leur déclaration.
  • Les destructeurs implicites sont appelés automatiquement par le compilateur C ++ lorsqu'un objet sort de la portée ou que l'exécution du programme se termine pour les objets externes et statiques d'un programme. Les destructeurs sont appelés pour détruire les objets créés par un nouveau mot-clé.
  • Dans le cas des destructeurs implicites et définis par l'utilisateur, le compilateur exécute d'abord le corps du destructeur, puis appelle les destructeurs de toutes les classes non statiques non variant, puis appelle les destructeurs des classes de base non virtuelles et virtuelles dans l'ordre inverse de leur construction.

Syntaxe de destructeur

Les destructeurs en C ++ sont précédés du signe tilde (~). Ci-dessous est mentionnée la syntaxe de base du destructeur:

Syntaxe:

Class class_name()
(


public:
class_name(); // Constructor
~class_name(); // destructor
)
)

Dans la syntaxe, 'nom_classe' est le nom de la classe et dans la méthode principale, le constructeur et le destructeur portant le même nom de la classe sont définis. Destructor n'a ni paramètres ni type de retour.

Exemples de destructeur en C ++

La mention ci-dessous est l'exemple de Destructor en C ++:

Exemple # 1: programme avec destructeur défini par l'utilisateur

Code:

#include
using namespace std;
class Example1( //class
public:
Example1()( // constructor cout << “Hello I am inside a constructor” << endl;
)
~Example1()( //destructor
cout << “Hello I am inside a destructor” << endl;
)
void display()
(
cout << “Hello this is a display method” << endl
)
);
int main()
(
Example1 ex; //object created
ex.display(); // display method called return 0;
)

Production:

Dans l'exemple ci-dessus, «Example1» est le nom de la classe et «ex» est l'objet créé de cette classe. Tout d'abord, le constructeur est appelé, donc le texte écrit dans le constructeur est imprimé, puis la méthode d'affichage est appelée ana, enfin, le destructeur est appelé après l'exécution complète du programme.

Exemple # 2: programme avec Virtual Destructor

Code:

#include
using namespace std;
class b1 ( //base class
public:
b1() // constructor of base class
(
cout << “Hello this is base constructor” << endl;
)
~virtual b1() // destructor of base class
(
cout << “Hello this is base destructor” << endl;
)
);
class b2: public b1( // derived class of base class (b1) public:
b2() //constructor of derived cass
(
cout << “Hello this is derived constructor” << endl;
)
~ b2() // destructor of derived class
(
cout << “Hello this is derived destructor” << endl;
)
);
int main(void) //main method
(
b2 *der = new b2();
b1 *bas = der;
delete der;
getchar();
return 0;
)

Production:

Il est recommandé de rendre le destructeur de la classe de base aussi virtuel car cela garantit que l'objet de la classe dérivée est détruit correctement. Chaque fois qu'une classe virtuelle est utilisée, un destructeur virtuel doit être ajouté immédiatement pour éviter tout résultat inattendu futur.

Avantages de Destructor en C ++

  • Il donne la dernière chance de nettoyer les ressources qui ne sont pas utilisées pour libérer la mémoire occupée par les objets inutilisés comme la suppression d'objets dynamiques, la fermeture des poignées système, les fichiers utilisés.
  • En raison du grand nombre de ressources qui occupent de l'espace et ne sont pas utilisées dans l'ordinateur, le destructeur est toujours accompagné d'une bonne image pour réduire les risques de fuite de mémoire en détruisant ces éléments inutilisés.
  • Bien que C ++ possède le mécanisme de Garbage Collection, mais appeler automatiquement le destructeur, que le programmeur l'appelle ou non pour libérer de l'espace, évite à l'utilisateur de nombreuses pires situations à l'avenir.

Points à résumer sur Destructor

  • Les destructeurs sont utilisés pour détruire les ressources inutilisées d'une classe.
  • Les destructeurs ont le même nom que le nom de classe précédé du signe (~).
  • Contrairement aux constructeurs, il ne peut y avoir aucun paramètre du destructeur.
  • Il n'y a pas de destructeur de type retour.
  • Si l'utilisateur ne définit pas lui-même le destructeur dans un programme, le compilateur construit automatiquement un destructeur pour lui.
  • Il ne peut pas y avoir plus d'un destructeur dans une même classe.

Conclusion

La description ci-dessus des destructeurs définit clairement l'utilisation et l'implémentation du destructeur dans le programme C ++. Bien que le concept du destructeur ne soit pas complexe, il est très important de comprendre avant sa mise en œuvre dans le programme car une mauvaise utilisation du destructeur peut conduire à des résultats inattendus.

Article recommandé

Ceci est un guide de Destructor en C ++. Nous discutons ici de l'introduction à Destructor en C ++ et du fonctionnement de Destructor ainsi que des avantages. Vous pouvez également consulter nos autres articles suggérés pour en savoir plus–

  1. Destructor en Java (Exemples)
  2. Introduction au remplacement en C ++
  3. Modèles en C ++ (exemples)
  4. Types de constructeur en C ++
  5. Destructeur en Python (syntaxe, exemples)