Différence entre constructeur et destructeur

Auteur: Laura McKinney
Date De Création: 1 Avril 2021
Date De Mise À Jour: 14 Peut 2024
Anonim
Différence entre constructeur et destructeur - La Technologie
Différence entre constructeur et destructeur - La Technologie

Contenu


Constructor et destructor sont les fonctions membres portant le même nom que leur classe. L'ancien type constructeur aide à initialiser un objet. Inversement, un destructeur est différent du constructeur qui supprime le constructeur créé quand il ne sert à rien.

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 fonction d’initialisation automatique est réalisée via ‘Constructeur’. Par exemple, si un objet doit exécuter du code avant sa destruction. Par exemple, si un objet doit fermer un fichier qu'il a 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 d’un tableau comparatif.


  1. Tableau de comparaison
  2. Définition
  3. Différences Clés
  4. Conclusion

Tableau de comparaison:

Base de comparaisonConstructeurDestructeur
Objectif

Il alloue la mémoire à un objet.Il libère la mémoire d'un objet.
Déclaration nom_classe (arguments éventuels) {};~ nom_classe (sans argument) {};
Arguments Le constructeur accepte les arguments Destructor 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 à un objet d'initialiser une partie de sa valeur avant qu'il ne soit utilisé.Destructor permet à un objet d'exécuter du code au moment de sa destruction.
Ordre d'exécution

Les constructeurs sont appelés dans un ordre successif.
Les destructeurs sont appelés dans l'ordre inverse du constructeur.
En chiffres Il peut y avoir plusieurs constructeurs dans une classe.Il y a toujours un seul destructeur dans la classe.
Copier le constructeur Le constructeur de copie permet à un constructeur de déclarer et d'initialiser un objet à partir d'un autre objet.Aucun tel concept.
Plus de chargement Les constructeurs peuvent être surchargés.Destructor ne peut pas être surchargé.


Définition de constructeur:

UNE 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.

Types de constructeurs

Il existe essentiellement trois types de constructeurs: les constructeurs par défaut, paramétrés et copiés.

  • Constructeur par défaut: C'est un constructeur où aucun argument n'est donné au constructeur. Le constructeur par défaut n'a pas de paramètre, mais les valeurs du constructeur par défaut peuvent être passées par défaut (dynamiquement).
  • Constructeur paramétré: Ce type de constructeur prend les arguments; nous pouvons transmettre différentes valeurs aux données membres comme arguments.
  • Copier le constructeur: Le constructeur de copie est différent des autres types de constructeurs car il accepte l'adresse de l'autre objet en tant qu'argument.

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:

UNE 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 tilde (~) symbole. 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 d'une classe parente, la classe enfant et la classe parente possèdent 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 << "les valeurs 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 éditée. Après que ce destructeur soit invoqué et que “l'objet C1 soit détruit”.

Besoin de destructeur

La création du constructeur utilise une certaine quantité d’espace mémoire car elle alloue en fin de compte de la mémoire aux objets. Cette mémoire allouée doit être désallouée avant la destruction des objets pour libérer les ressources pour d'autres tâches. Les destructeurs sont extrêmement utiles pour le but recherché, car ils détruisent efficacement les objets et effectuent des tâches de nettoyage pour libérer la mémoire.

  1. L'objectif principal d'un constructeur est d'allouer de la mémoire aux objets lors de leur création. Par contre, le but principal d’un destructeur est 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. D'autre part, 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éé. Au contraire, un destructeur est appelé lorsqu'un programme est terminé ou qu'il quitte le bloc dans lequel un objet est créé.
  4. Un constructeur est généralement utilisé pour initialiser les données membres de la classe, tandis 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. Inversement, 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 alors qu'il ne peut avoir 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. Au contraire, 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 essentielle entre eux est 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. Le constructeur et le destructeur sont appelés implicitement par le compilateur même s'ils ne sont pas définis dans la classe.