Recommandé, 2024

Choix De L'Éditeur

Différence entre constructeur et destructeur

Parfois, il est nécessaire d’initialiser une partie d’un objet avant de pouvoir l’utiliser. Par exemple, nous travaillons sur la pile. Avant d’effectuer une action, le haut de la pile doit toujours être mis à zéro. Cette fonctionnalité d'initialisation automatique est réalisée via "Constructeur". Probablement, si un objet a besoin d'exécuter du code avant sa destruction. Par exemple, si un objet doit fermer un fichier qu'il avait ouvert, avant sa destruction. Il peut être effectué à l'aide de «Destructor».

Voyons quelques-unes des différences fondamentales entre constructeur et destructeur à l'aide du tableau de comparaison

Tableau de comparaison:

Base de comparaisonConstructeurDestructeur
Objectif
Il alloue la mémoire à un objet.Il libère la mémoire d'un objet.
Déclarationnom_classe (arguments éventuels) {};~ nom_classe (sans argument) {};
ArgumentsLe constructeur accepte les argumentsDestructor n'accepte aucun argument.
AppelLe constructeur est appelé automatiquement lors de la création de l'objet.Destructor est appelé automatiquement lors de la fermeture du programme ou de la fin du programme.
TravailConstructor permet à l'objet d'initialiser une partie de sa valeur avant son utilisation.Destructor permet à l'objet d'exécuter du code au moment de sa destruction.
Ordre d'exécution
Les constructeurs sont appelés par ordre successif.
Les destructeurs sont appelés dans l'ordre inverse du constructeur.
En chiffresIl peut y avoir plusieurs constructeurs dans la classe.Mais il y a toujours un seul destructeur dans la classe.
Copier le constructeurLe constructeur de copie permet à un constructeur de déclarer et d'initialiser un objet à partir d'un autre objet.Aucun tel concept.
Plus de chargementLes constructeurs peuvent être surchargés.Destructor ne peut pas être surchargé.

Définition de constructeur:

Un constructeur est fondamentalement une fonction membre de la classe, qui initialise l'objet et lui alloue de la mémoire. Les constructeurs peuvent être facilement identifiés car ils sont déclarés et définis avec le même nom que celui de la classe. Un constructeur n'a aucun type de retour; alors, ils ne renvoient rien, pas même «vide». Un constructeur est toujours défini dans la section publique d'une classe.

Il peut y avoir plusieurs constructeurs dans une classe; ils peuvent être distingués en fonction du nombre et du type d'arguments passés. S'il y a plusieurs constructeurs dans une classe; constructeur implicite (constructeur ne rien faire) doit être défini avec eux; il ne fait rien mais satisfait le compilateur.

Les constructeurs peuvent également être définis avec les arguments par défaut. Considérant qu’ils initialisent également l’objet «dynamiquement». Les constructeurs ne peuvent être ni hérités, ni virtuels, mais ils peuvent être surchargés. Ils ne peuvent pas être renvoyés à leur adresse.

Implantation du constructeur:

 classe Const {int a, b; public: Const () {// constructeur sans paramètre a = 0; b = 0; } Const (int c, int d) {// constructeur avec le paramètre a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // cette instruction appelle le constructeur} 

Lorsque C1 est créé, un constructeur sans paramètre est exécuté, car C1 ne transmet aucun paramètre. Par contre, lors de la création de C2, un constructeur avec paramètre est exécuté, car il passe deux entiers au constructeur.

Définition de destructeur:

Un destructeur est également une fonction membre d'une classe, qui libère la mémoire allouée à un objet. Il est défini avec le même nom que celui d'une classe, précédé d'un symbole tilde (~). Les destructeurs sont toujours appelés dans l'ordre inverse des constructeurs.

Il y a toujours un seul destructeur dans une classe, car il n'accepte aucun argument. Les objets locaux sont détruits dès que le contrôle de l'exécution quitte le bloc; D'autre part, les objets globaux sont détruits lorsque l'ensemble du programme se termine. Un destructeur est appelé implicitement par un compilateur. Si les classes sont héritées et qu'une classe est dérivée de la classe parent et que la classe enfant et une classe parent ont des destructeurs; ensuite, le destructeur de la classe dérivée est appelé en premier, suivi du destructeur de la classe parente.

Implémentation de Destructor:

 classe Const {int a, b; public: Const (int c, int d) {// constructeur avec paramètre. a = c; c = d; cout << "la valeur de a et b sont" < 

Lorsque l'objet C1 est créé, un constructeur avec deux paramètres de type entier est appelé et le membre “a, b” est initialisé et la valeur de “a, b” est imprimée. Après que ce destructeur soit invoqué et affiche le message “l’objet C1 est détruit”.

Différence clé entre constructeurs et destructeurs

  1. L'objectif principal d'un constructeur est d'allouer de la mémoire aux objets lors de leur création, tandis qu'un destructeur a pour objectif principal de libérer la mémoire de l'objet lorsqu'il est détruit.
  2. Un constructeur est autorisé à accepter les arguments car ceux-ci peuvent être utilisés pour initialiser les données membres de la classe. Un destructeur n'accepte aucun argument car son seul travail est de libérer la mémoire de l'objet.
  3. Un constructeur est appelé lorsqu'un objet est créé. D'autre part, un destructeur est appelé lorsqu'un programme est terminé ou que le programme quitte le bloc dans lequel l'objet est créé.
  4. Un constructeur est généralement utilisé pour initialiser les données membres de la classe alors qu'un destructeur est utilisé pour permettre à l'objet d'effectuer une action avant sa destruction.
  5. Les constructeurs sont exécutés dans l'ordre successif, c'est-à-dire que s'il existe une classe dérivée qui hérite de la classe de base et que l'objet de la classe dérivée est créé, il appellera le constructeur de la classe de base en premier, puis le constructeur de la classe dérivée. D'autre part, le destructeur de la classe dérivée est appelé en premier, puis la classe de base signifie qu'un destructeur est exécuté dans l'ordre inverse du constructeur.
  6. En classe, il peut y avoir plusieurs constructeurs identifiés par le nombre d'arguments passés. En classe, il n'y a qu'un seul destructeur.
  7. Il existe un concept de constructeur de copie qui permet à un objet d'être initialisé à partir d'un autre objet alors que le destructeur n'a pas ce concept.
  8. Les constructeurs peuvent être surchargés pour effectuer différentes actions sous le nom du même constructeur alors que les destructeurs ne peuvent pas être surchargés.

Conclusion:

Outre la similitude, ce constructeur et ce destructeur sont la fonction membre spéciale d'une classe et possèdent le même nom, la différence fondamentale entre eux étant que "constructeur" est appelé au moment de l'allocation de mémoire et "destructeur" est appelé à la temps de désallocation de la mémoire des objets. Constructeur et destructeur sont appelés implicitement par le compilateur même s'ils ne sont pas définis dans la classe.

Top