Destruktori on erikoisluokkamenetelmä , jonka avulla objektin alustus poistetaan (esimerkiksi muistin vapauttaminen ).
Delphi - avainsanaa käytetään ilmoittamaan tuhoaja destructor. Hävittäjän nimi voi olla mikä tahansa, mutta on suositeltavaa aina nimetä tuhoaja Destroy.
TClassWithDestructor = luokan tuhoaja Destroy ; ohittaa ; loppu ;Delphissä kaikki luokat ovat vähintään TObject -luokan jälkeläisiä , joten muistin asianmukaisen vapauttamiseksi on välttämätöntä ohittaa tuhoaja käyttämällä override.
Delphissä suoraa tuhoajakutsua käytetään harvoin. Sen sijaan käytetään menetelmää Free.
OmaObject.Free;Menetelmä Freetarkistaa ensin, onko tuhottava objekti olemassa, ja kutsuu sitten tuhoajan. Tämän tekniikan avulla voit välttää virheet, jotka tapahtuvat käytettäessä olematonta objektia.
~NameOfClass() — destructor, jolla on nimi ~NameOfClass, ei ole syöttöparametreja.
Tässä tapauksessa, kun objekti tuhoutuu, se tulostaa parametrin konsoliin a.
implRakenteen lohkossa Fooon toteutettu samanniminen piirremenetelmä Drop[4] . Alla oleva koodi luo muuttujan foo. Älykkään muistimallin ansiosta tuhoaja kutsutaan automaattisesti ja ilman lisäkustannuksia heti, kun muuttujan laajuus päättyy.
anna foo = Foo :: uusi ( 42 );Liitäntöjen tai abstraktien luokkien tuhoaja tehdään yleensä virtuaaliseksi . Tämän tekniikan avulla voit poistaa oikein ilman muistivuotoja, kun on vain osoitin perusluokkaan [5] .
Olkoon (C++:ssa) olemassa tyyppi Fatherja siitä johdettu tyyppi Son:
luokan isä { julkinen : Isä () {} ~ Isä () {} }; luokan Poika : julkinen Isä { julkinen : int * puskuri ; Poika () : Isä () { puskuri = uusi int [ 1024 ]; } ~ Poika () { poista [] puskuri ; } };Alla oleva koodi on virheellinen ja vuotaa muistia.
Isä * esine = uusi Poika (); // Son() on nimeltään delete object ; // kutsuu ~Isä()!!Jos kuitenkin teet destructorista Fathervirtuaalisen:
luokan isä { julkinen : Isä () {} virtuaalinen ~ Isä () {} }; luokan Poika : julkinen Isä { yksityinen : int * puskuri ; julkinen : Poika () : Isä () { puskuri = uusi int [ 1024 ]; } ~ Poika () { poista [] puskuri ; } };kutsu delete object;aiheuttaa tuhoajia ~Sonja ~Father.