Destruktor

A destruktor az objektumorientált programozásban (szokták objektumelvű programozásnak is nevezni) egy olyan tagfüggvény (metódus), amely automatikusan meghívódik, amikor az objektum megszűnik.

Elsődleges célja az hogy felszabadítsuk az általa lefoglalt erőforrásokat illetve megszüntessük az őrá mutató referenciákat más objektumokban hogy később ne történhessen érvénytelen hivatkozás. A destruktorok használata kulcsfontosságú szerepet játszik az RAII (resource acquisition is initialization) koncepció megvalósításában.

Az olyan programozási nyelvekben, ahol automatikus szemétgyűjtő (garbage collection) mechanizmus van, nagyon nehéz determinisztikusan biztosítani a destruktor meghívását ezért ezekről általánosan azt tartják hogy nem alkalmasak az RAII megvalósítására. Ezekben a felszabadítást a megfelelő tagfüggvény explicit meghívásával lehet elérni (amelyet általában Dispose()-nak hívnak).

Példák

C++

A destruktornak ugyanaz a neve, mint az osztálynak, csak egy tilde ('~', azaz hullámvonal) karakterrel kezdődik. Ha az adott objektumot automatikus változóként hozták létre, akkor a destruktora akkor fog lefutni, amikor az kikerül a látókörből (angolul scope). Ha egy objektumot a new kulcsszóval hozunk létre, akkor a destruktor akkor fog meghívódni, amikor a delete kulcsszót alkalmazzuk egy olyan mutatón (angolul pointer), amely az objektumra mutat.

Öröklődés alkalmazása esetén a virtuális destruktorok használata biztosítja azt, hogy a leszármazott osztályok destruktorai is megfelelően meghívódnak, ezért minden olyan osztálynak illik virtuális destruktort definiálnia amelyet arra terveznek, hogy örököljenek belőlük, még akkor is ha nem csinál semmit.

#include   class Pelda { public:     Pelda()     {         std::cout << ( void* )this << ": Pelda()" << std::endl;     }     ~Pelda()     {         std::cout << ( void* )this << ": ~Pelda()" << std::endl;     } };  int main() {     Pelda tomb[ 3 ]; } 

Kimenete egy konkrét rendszeren egy futtatáskor (a kettőspont előtt az objektum virtuális címe olvasható):

0x7fffffffbeb0: Pelda() 0x7fffffffbeb1: Pelda() 0x7fffffffbeb2: Pelda() 0x7fffffffbeb2: ~Pelda() 0x7fffffffbeb1: ~Pelda() 0x7fffffffbeb0: ~Pelda() 

Megjegyzés: A megszüntetés sorrendje a létrehozás sorrendjének a fordítottja, amely nem véletlen. Képzeljük el, hogy létrehozunk két objektumot úgy hogy a másodikban hivatkozást helyezünk el az elsőre (például egy mutatóval mutatunk rá). Ha a megszüntetés sorrendje nem lenne fordított, akkor egy instabil állapoton haladna keresztül a program látókörből való kilépéskor.

Kapcsolódó szócikkek

  • Finalizáló (angolul finalizer)
  • Konstruktor
  • RAII (Resource Acquisition Is Initialization)

Jegyzetek

Tags:

Destruktor PéldákDestruktor Kapcsolódó szócikkekDestruktor JegyzetekDestruktorObjektum (informatika)Objektumorientált programozás

🔥 Trending searches on Wiki Magyar:

Stephen HawkingElvis PresleySzerbiaJulia RobertsFreemailCiprusi KöztársaságDiscordPablo EscobarCseh Katalin (politikus)Neumann JánosLeggyakoribb magyar családnevek listájaZöld gyíkBaranyi KrisztinaCsokonai Vitéz MihályJanus PannoniusVágó István (műsorvezető)Az újonc (televíziós sorozat)Magyarország a második világháborúbanSzoboszlai DominikMagyarországi kínaiakGreenland – Az utolsó menedékReneszánszHalotti beszéd és könyörgésA majmok bolygója (egyértelműsítő lap)Leonardo da VinciNagy Imre (miniszterelnök)IzraelNetflixFóbiák listájaAz emberi élet szakaszaiRaxLégyölő pókszázlábúOrbán ViktorBocskai IstvánI. Erzsébet angol királynőVérSzarajevói merényletSzent Péter esernyője (regény)GótikaObszesszív-kompulzív zavarV. Naszályi MártaMásodik Reformkor PártOsztrák–Magyar MonarchiaI. István magyar királyIII. Alexandrosz makedón királyBerlini falMagyar labdarúgó-bajnokság (másodosztály)Michael SchumacherVecsei H. MiklósLuxemburgIpari forradalom2024–2025-ös UEFA-bajnokok ligájaValó VilágMolnár Csaba (politikus)Weöres SándorÉletre-halálra (film, 1998)Kamarás IvánSkorpió (együttes)II. József magyar királyM2-es metróvonal (Budapest)Giorgia MeloniAlföldFehér akácMagyar Kétfarkú Kutya PártLíra (műnem)Az Amerikai Egyesült Államok államaiHell Energy Magyarország Kft.Szabad Demokraták SzövetségeAntigoné (Szophoklész)Tesla, Inc.Tatárjárás MagyarországonAdolf HitlerÚjpest FCAnne FrankGyenes AndrásCalvin KleinIII. Károly brit király🡆 More