Un destructor este o metodă de clasă specială care servește la deinițializarea unui obiect (de exemplu, eliberarea memoriei ).
Cuvântul cheie Delphi este folosit pentru a declara un destructor destructor. Numele destructorului poate fi orice, dar este recomandat să-l numiți întotdeauna pe destructor Destroy.
TClassWithDestructor = destructor de clasă Distruge ; suprascrie ; sfârşitul ;În Delphi, toate clasele sunt descendente cel puțin ai clasei TObject , prin urmare, pentru a dealoca corect memoria, este necesar să suprascrieți destructorul folosind override.
În Delphi, un apel direct destructor este rar folosit. Metoda este folosită în schimb Free.
MyObject.Free;Metoda Freeverifică mai întâi dacă obiectul care este distrus există, apoi apelează destructorul. Această tehnică vă permite să evitați erorile care apar la accesarea unui obiect inexistent.
~NameOfClass() — destructor, are numele ~NameOfClass, nu are parametri de intrare.
În acest caz, când obiectul este distrus, acesta trimite parametrul în consolă a.
În blocul implpentru structura Foo, este implementată metoda trăsăturii cu același nume Drop[4] . Codul de mai jos creează o variabilă foo. Datorită modelului de memorie inteligentă, destructorul va fi apelat automat și fără overhead de îndată ce domeniul de aplicare al variabilei se termină.
let foo = Foo :: new ( 42 );Destructorul de interfețe sau clase abstracte este de obicei făcut virtual . Această tehnică vă permite să ștergeți corect fără pierderi de memorie, având doar un pointer către clasa de bază [5] .
Fie că (în C++) există un tip Fatherși un tip derivat din acesta Son:
tatăl de clasă { public : Tatăl () {} ~ Tatăl () {} }; clasa Fiul : Tatăl public { public : int * buffer ; Fiul () : Tatăl () { buffer = new int [ 1024 ]; } ~ Fiul () { șterge [] buffer ; } };Codul de mai jos este incorect și pierde memorie.
Tată * obiect = nou Fiu (); // Son() se numește ștergere obiect ; // sunând pe ~Tatăl()!!Cu toate acestea, dacă faceți destructorul Fathervirtual:
tatăl de clasă { public : Tatăl () {} virtual ~ Tată () {} }; clasa Fiul : Tatăl public { privat : int * buffer ; public : Fiul () : Tatăl () { buffer = new int [ 1024 ]; } ~ Fiul () { șterge [] buffer ; } };apelul delete object;va provoca distrugătorii ~Sonşi ~Father.