Destruktor

A Programozás Wiki wikiből

Destruktornak hívjuk az objektumorientált programozási nyelvekben egy osztály azon metódusát, amely az objektum felszámolásakor hívódik meg. A destruktor felelős az objektum által használt erőforrások felszabadításáért.

Az objektumok létrehozásánál a konstruktor játszik szerepet.

Jellemzők[szerkesztés]

A destruktor neve több nyelvben egy ~ jelből és az osztály nevéből áll elő. Bizonyos nyelvek esetén (pl. PHP) egy előre definiált azonosítóval jelzik, míg másoknál (pl. Object Pascal) a programozó nevezheti el. Jellemzően virtuális metódus, és nincs paramétere, mert az objektumot felszámoláskor sokszor az alap (Object, TObject) ősosztályként hivatkozzák.

A destruktor jellemzően az objektum élettartama során lefoglalt memóriát szabadítja fel, a megnyitott fájlokat és egyéb erőforrásokat zárja le. A modern, hulladékgyűjtős programnyelvek ezekről nagyrészt maguk gondoskodnak, az ilyen programokban csak elvétve találunk destruktorokat.

A destruktor rendszerint a futás végén hívja az ősosztály destruktorát. Sok nyelvben ezt jelölni sem kell.

Példa[szerkesztés]

Példa C++-ban

#include <fstream>

// ősosztály
class A {
protected:
   std::ifstream is;
public:
   A(): is( "a.txt" ) {} // konstruktor megnyitja a.txt-t
   ~A() { is.close(); } // destruktor lezárja a fájlt 
};

// leszármazott osztály
class B : protected A {
   std::ofstream os;
public:
   B(): os( "b.txt") // konstruktor megnyitja b.txt-t
     { os << is.rdbuf(); } // és beleírja a.txt tartalmát
   ~B() { os.close(); } // destruktor lezárja b.txt-t
};

int main() {
   B b;
   return 0;
}

A program elején lefutnak az A, B, metódusok, a.txt tartalma b.txt-be másolódik. A program végén fut ~B és ~A, vagyis a fájlok bezáródnak.