En destructor er en speciel klassemetode , der tjener til at deinitialisere et objekt (for eksempel frigørelse af hukommelse ).
Delphi nøgleordet bruges til at erklære en destruktor destructor. Navnet på destruktoren kan være hvad som helst, men det anbefales altid at navngive destructoren Destroy.
TClassWithDestructor = klassedestruktor Destroy ; _ tilsidesætte ; ende ;I Delphi er alle klasser efterkommere af mindst TObject -klassen , derfor er det nødvendigt at tilsidesætte destruktoren ved hjælp af override.
I Delphi bruges et direkte destruktoropkald sjældent. Metoden bruges i stedet Free.
MyObject.Free;Metoden Freekontrollerer først, om objektet, der ødelægges, eksisterer, og kalder derefter destruktoren. Denne teknik giver dig mulighed for at undgå fejl, der opstår, når du får adgang til et ikke-eksisterende objekt.
~NameOfClass() — destructor, har navnet ~NameOfClass, har ingen inputparametre.
I dette tilfælde, når objektet er ødelagt, udsender det parameteren til konsollen a.
I blokken implfor strukturen Fooer trækmetoden af samme navn implementeret Drop[4] . Koden nedenfor opretter en variabel foo. Takket være den smarte hukommelsesmodel kaldes destruktoren automatisk og uden overhead, så snart omfanget af variablen slutter.
lad foo = Foo :: ny ( 42 );Destruktoren af grænseflader eller abstrakte klasser er normalt lavet virtuel . Denne teknik giver dig mulighed for at slette korrekt uden hukommelseslækager, idet du kun har en pointer til basisklassen [5] .
Lad (i C++) der er en type Fatherog en type afledt af den Son:
klasse far { offentligt : Far () {} ~ Far () {} }; klasse Søn : offentlig Fader { offentligt : int * buffer ; Søn () : Far () { buffer = new int [ 1024 ]; } ~ Son () { slet [] buffer ; } };Koden nedenfor er forkert og lækker hukommelse.
Fader * objekt = ny Søn (); // Son() kaldes delete object ; // kalder ~Far()!!Men hvis du gør destruktoren Fathervirtuel:
klasse far { offentligt : Far () {} virtuel ~ Far () {} }; klasse Søn : offentlig Fader { privat : int * buffer ; offentligt : Søn () : Far () { buffer = new int [ 1024 ]; } ~ Son () { slet [] buffer ; } };opkaldet delete object;vil forårsage ødelæggerne ~Sonog ~Father.