Hva er en destruktor?
Destructor er en forekomstmedlemsfunksjon som påkalles automatisk når et objekt skal ødelegges. Det betyr at en destruktor er den siste funksjonen som skal kalles før et objekt blir ødelagt.
- En destruktor er også en spesiell medlemsfunksjon som en konstruktør. Destructor ødelegger klasseobjektene laget av konstruktøren.
- Destructor har samme navn som klassenavnet foran med et tilde-symbol (~).
- Det er ikke mulig å definere mer enn én destruktor.
- Destruktoren er bare én måte å ødelegge objektet skapt av konstruktøren. Destruktoren kan derfor ikke overbelastes.
- Destructor krever verken noe argument eller returnerer noen verdi.
- Den kalles automatisk når et objekt går utenfor rekkevidde.
- Destruktoren frigjør minneplass okkupert av objektene som er opprettet av konstruktøren.
- I destructor blir objekter ødelagt på motsatt side av en objektskaping.
Saken er å merke seg her hvis objektet er opprettet ved å bruke new eller konstruktøren bruker new for å allokere minne som ligger i heap-minnet eller det ledige lageret, bør destruktoren bruke delete for å frigjøre minnet.
Syntaks
Syntaksen for å definere destruktoren i klassen:
~ () { // some instructions }> Syntaksen for å definere destruktoren utenfor klassen:
:: ~() { // some instructions }> Eksempel 1
Koden nedenfor demonstrerer automatisk utførelse av konstruktører og destruktorer når objekter blir opprettet og ødelagt, henholdsvis.
C++
dobbel lenket liste
// C++ program to demonstrate the execution of constructor> // and destructor> #include> using> namespace> std;> class> Test {> public>:> >// User-Defined Constructor> >Test() { cout <<>'
Constructor executed'>; }> >// User-Defined Destructor> >~Test() { cout <<>'
Destructor executed'>; }> };> main()> {> >Test t;> >return> 0;> }> |
>
>Produksjon
Constructor executed Destructor executed>
Eksempel 2
Koden nedenfor demonstrerer automatisk kjøring av konstruktører og destruktorer hver gang når flere objekter henholdsvis opprettes og ødelegges.
C++
// C++ program to demonstrate the execution of constructor> // and destructor when multiple objects are created> #include> using> namespace> std;> class> Test {> public>:> >// User-Defined Constructor> >Test() { cout <<>'
Constructor executed'>; }> >// User-Defined Destructor> >~Test() { cout <<>'
Destructor executed'>; }> };> main()> {> >// Create multiple objects of the Test class> >Test t, t1, t2, t3;> >return> 0;> }> |
>
>Produksjon
Constructor executed Constructor executed Constructor executed Constructor executed Destructor executed Destructor executed Destructor executed Destructor executed>
Eksempel 3
C++-programmet nedenfor viser antall ganger konstruktører og destruktorer blir kalt.
react js-opplæringen
C++
// C++ program to demonstrate the number of times> // constructor and destructors are called> #include> using> namespace> std;> static> int> Count = 0;>//It is static so that every class object has the same value> class> Test {> public>:> >// User-Defined Constructor> >Test()> >{> >// Number of times constructor is called> >Count++;> >cout <<>'No. of Object created: '> << Count> ><< endl;> >}> >// User-Defined Destructor> >~Test()> >{> > >cout <<>'No. of Object destroyed: '> << Count>//It will print count in> ><< endl;>//decending order> >Count--;> >// Number of times destructor is called> >}> };> // driver code> int> main()> {> >Test t, t1, t2, t3;> >return> 0;> }> |
>
>
Produksjon
No. of Object created: 1 No. of Object created: 2 No. of Object created: 3 No. of Object created: 4 No. of Object destroyed: 4 No. of Object destroyed: 3 No. of Object destroyed: 2 No. of Object destroyed: 1>
Merk: Objekter blir ødelagt i omvendt rekkefølge av opprettelsen. I dette tilfellet er t3 den første som blir ødelagt, mens t er den siste.
Egenskaper til Destructor
Følgende er hovedegenskapene til Destructor:
- Destruktorfunksjonen aktiveres automatisk når objektene blir ødelagt.
- Den kan ikke erklæres statisk eller konstant.
- Destruktoren har ingen argumenter.
- Den har ingen returtype, ikke engang ugyldig.
- Et objekt i en klasse med en Destructor kan ikke bli medlem av fagforeningen.
- En destruktor bør deklareres i den offentlige delen av klassen.
- Programmereren kan ikke få tilgang til adressen til destruktoren.
Når kalles destruktoren?
En destruktorfunksjon kalles automatisk når objektet går utenfor rekkevidde:
- funksjonen avsluttes
- programmet avsluttes
- en blokk som inneholder lokale variabler slutter
- en sletteoperatør kalles opp
Merk: ødelegger kan også kalles eksplisitt for et objekt.
Hvordan kalle destruktorer eksplisitt?
Vi kan kalle destruktorene eksplisitt ved å bruke følgende uttalelse:
object_name.~class_name()>
Hvordan er destruktorer forskjellige fra vanlige medlemsfunksjoner?
- Destruktorer har samme navn som klassen foran med en tilde (~)
- Destruktorer tar ingen argumenter og returnerer ingenting
C++
#include> using> namespace> std;> class> String {> private>:> >char>* s;> >int> size;> public>:> >String(>char>*);>// constructor> >~String();>// destructor> };> String::String(>char>* c)> {> >size =>strlen>(c);> >s =>new> char>[size + 1];> >strcpy>(s, c);> }> String::~String() {>delete>[] s; }> int> main()> {> >String str =>'Hello, World!'>;> >String myString(str);> >cout <<>'String: '> << myString.s << endl;> >return> 0;> }> |
>
>
Kan det være mer enn én destruktor i en klasse?
Nei, det kan bare være én destruktor i en klasse med et klassenavn foran med ~, ingen parametere og ingen returtype.
Når må vi skrive en brukerdefinert destruktor?
Hvis vi ikke skriver vår egen destruktor i klassen, lager kompilatoren en standard destruktor for oss. Standarddestruktoren fungerer fint med mindre vi har dynamisk tildelt minne eller peker i klassen. Når en klasse inneholder en peker til minne som er allokert i klassen, bør vi skrive en destruktor for å frigjøre minne før klasseforekomsten blir ødelagt. Dette må gjøres for å unngå minnelekkasjer.
Kan en destruktor være virtuell?
Ja, faktisk er det alltid en god idé å gjøre destruktorer virtuelle i basisklassen når vi har en virtuell funksjon. Se virtuell destruktor for flere detaljer.
Du kan gjerne ta en quiz om destruktorer.
relaterte artikler
- Konstruktører i C++
- Virtual Destroyer
- Ren virtuell destruktor i C++