Destruktor je speciální metoda třídy , která slouží k deinicializaci objektu (například k uvolnění paměti ).
Klíčové slovo Delphi se používá k deklaraci destruktoru destructor. Název destruktoru může být jakýkoli, ale doporučuje se vždy pojmenovat destruktor Destroy.
TClassWithDestructor = destruktor třídy Destroy ; přepsat ; konec ;V Delphi jsou všechny třídy potomky alespoň třídy TObject , proto, aby bylo možné správně uvolnit paměť, je nutné přepsat destruktor pomocí override.
V Delphi se přímé volání destruktoru používá jen zřídka. Místo toho se používá metoda Free.
MyObject.Free;Metoda Freenejprve zkontroluje, zda ničený objekt existuje, a poté zavolá destruktor. Tato technika umožňuje vyhnout se chybám, ke kterým dochází při přístupu k neexistujícímu objektu.
~NameOfClass() — destruktor, má jméno ~NameOfClass, nemá žádné vstupní parametry.
V tomto případě, když je objekt zničen, odešle parametr do konzole a.
V bloku implpro strukturu Fooje implementována stejnojmenná metoda vlastností Drop[4] . Níže uvedený kód vytvoří proměnnou foo. Díky modelu chytré paměti bude destruktor zavolán automaticky a bez režie, jakmile skončí rozsah proměnné.
let foo = Foo :: new ( 42 );Destruktor rozhraní nebo abstraktní třídy je obvykle virtuální . Tato technika vám umožňuje správně mazat bez úniku paměti, má pouze ukazatel na základní třídu [5] .
Nechť (v C++) existuje typ Fathera od něj odvozený typ Son:
třída Otec { veřejnost : Otec () {} ~ Otec () {} }; třída Syn : veřejný Otec { veřejnost : int * buffer ; Syn () : Otec () { buffer = new int [ 1024 ]; } ~ Son () { delete [] buffer ; } };Níže uvedený kód je nesprávný a dochází k úniku paměti.
Otec * objekt = nový Syn (); // Son() se nazývá delete object ; // volání ~Otec()!!Pokud však destruktor změníte na Fathervirtuální:
třída Otec { veřejnost : Otec () {} virtuální ~ Otec () {} }; třída Syn : veřejný Otec { soukromý : int * buffer ; veřejnost : Syn () : Otec () { buffer = new int [ 1024 ]; } ~ Son () { delete [] buffer ; } };volání delete object;způsobí destruktory ~Sona ~Father.