Destructeur

Pour les articles homonymes, voir destructeur (homonyme).

En programmation orientée objet, le destructeur d'une classe est une méthode spéciale lancée lors de la destruction d'un objet afin de récupérer les ressources (principalement la mémoire vive) réservée dynamiquement lors de l'instanciation de l'objet. Alors qu'il peut exister plusieurs constructeurs, il ne peut exister qu'un seul destructeur.

Utilisation

Les destructeurs permettent d'utiliser le pattern de programmation Resource Acquisition Is Initialization qui facilite l'écriture de code gérant bien les exceptions. Il permet de libérer les ressources utilisées de manière certaine, et aussi d'assurer la fermeture de certaines parties du code.

Les langages qui utilisent des ramasse-miettes n'offrent pas le mécanisme des destructeurs puisque le programmeur ne doit plus gérer la mémoire lui-même. Ainsi Java propose les Finalizer à la place. Il s'agit d'une méthode spéciale, garantie d'être appelée une fois avant que l'objet ne soit récupéré par le ramasse-miettes. En revanche, il n'y a aucune garantie sur le moment où le ramasse-miette va passer.

Dans certains langages, l'allocation de mémoire dynamique se fait à l'aide des pointeurs. Si une classe Route a un tableau de pointeurs sur une classe Voiture pour symboliser les véhicules qui l’empruntent, il faudra détruire les "Voitures" si la classe route est détruite afin de ne pas causer une fuite de mémoire.

Syntaxe

  • C++ : préfixe tilde (~) devant le nom de la classe suivie de "()".
  • D : ~this().
  • Object Pascal : destructor ou Destroy.
  • Objective-C : dealloc.
  • Perl : DESTROY.
  • PHP : __destruct (depuis PHP 5).
  • Python : __del__ est appelé "destructeur" en Python 2, mais c'est en fait un finaliseur en Python 3.
  • Rust : drop.
  • Swift : deinit.

Exemples

En C++

En C++, le destructeur est une fonction membre de la classe portant le même nom que celle-ci précédé d'un tilde. Il est appelé lorsqu'un objet devient hors de portée ou lors de l'utilisation du mot-clé delete.

class Object {     public :         ~Object (); // Destructeur };  int main () {     Object* p_obj = new Object();     delete p_obj;   // Destruction de l'objet pointé par p_obj }                   // Destruction d'obj 

Si le concepteur d'une classe ne fournit pas de destructeur, le compilateur C++ implémente un destructeur par défaut qui invoque les destructeurs des classes-mères et des attributs.

Implémenter le destructeur est souvent nécessaire en C++, lorsque des ressources sont allouées sur le tas. Cependant, dès lors que l'on utilise à la place des techniques de resource acquisition is initialization, telles que les pointeurs intelligents de la STL, on pourra souvent s'en passer.

En C#

En C#, le destructeur est appelé grâce au symbole '~' placé avant le nom de la class.

public class Test() {     //Constructeur     public Test()     {         -- Code     }          //Destructeur     ~Test()     {         -- Code     } } 

Références

Voir aussi

Tags:

Destructeur UtilisationDestructeur SyntaxeDestructeur ExemplesDestructeur RéférencesDestructeur Voir aussiDestructeurDestructeur (homonyme)

🔥 Trending searches on Wiki Français:

Olivier GiroudAssociation sportive de Saint-ÉtienneÉric ChardenMaïwennJordan BardellaNotation financière de la FranceCrispín d'OlotRobert BadinterMeilleurs buteurs du championnat d'Espagne de footballJean-Michel AphatieDavid GuettaChatA-haDani (artiste)Jérémie CovillaultEspagneLudovic BlasNouveau CaireAnne RosencherPatricia MillardetBenito MussoliniMichelle PfeifferRufus SewellLartisteBruno Le MaireThe Night AgentLady GagaOlivier DuhamelFast and Furious (série de films)Golden Globe Race 2022Timothée ChalametDave (chanteur)Le Seigneur des anneaux (série de films)Moussa SissokoNeymarSaison 3 de The MandalorianMcDonald'sSalade grecque (série télévisée)Nicolas CageThijs DallingaSarah BernhardtNicolas PalloisChampionnat de France de football 2022-2023Ligue des champions de l'UEFA 2022-2023Championnat du monde de snooker 2023Lili ReinhartSocietà Sportiva Calcio NapoliCoupe de France de football 2021-2022Réseautage socialBigflo et OliFête du TravailÉquipe d'Argentine de footballSteven SpielbergSaints de glaceStar WarsCassandre (série télévisée)Scarlett JohanssonRomain DurisBallon d'orBlacklist (série télévisée)Robert De NiroThomas PesquetRafael NadalTikTokMarion GameRémy CabellaSpice GirlsAlban LenoirGaspard UllielKylian MbappéCatherine de SienneMonica BellucciCharles III (roi du Royaume-Uni)Toujours là pour toi (série télévisée)LionFrance Gall🡆 More