Rekommenderas, 2024

Redaktionen

Skillnad mellan byggare och destructor

Ibland är det nödvändigt att initiera en del av ett objekt innan det kan användas. Till exempel arbetar vi på stapeln, innan vi utför någon åtgärd måste toppen av stapeln alltid vara nollställd. Denna funktion för automatisk initiering utförs genom "Constructor". Sannolikt, om ett objekt behöver exekvera en kod innan den förstörs. Till exempel, om ett objekt behöver stänga en fil som den hade öppnat, innan dess förstörelse. Det kan utföras med hjälp av "Destructor".

Låt oss översöka några av de grundläggande skillnaderna mellan konstruktör och destruktor med hjälp av jämförelsetabell

Jämförelsediagram:

Grunder för jämförelseKonstruktördestructor
Ändamål
Det allokerar minnet till ett objekt.Det tar bort minnet av ett objekt.
Deklarationklassnamn (eventuella argument) {};~ klassnamn (inga argument) {};
ArgumentConstructor accepterar argumentDestructor accepterar inte något argument.
KallelseKonstruktorn kallas automatiskt, medan objektet skapas.Destructor kallas automatiskt, eftersom blocket är avslutat eller programmet avslutas.
ArbetssättConstructor tillåter objekt att initiera några av dess värde innan det används.Destructor tillåter objekt att exekvera någon kod vid tidpunkten för dess förstöring.
Order of execution
Konstruktorn kallas i successiv ordning.
Destructor kallas i omvänd ordning av konstruktör.
I siffrorDet kan finnas flera konstruktörer i klassen.Men det finns alltid en enda destructor i klassen.
Kopiera konstruktornKopiera konstruktören tillåter en konstruktör att deklarera och initiera ett objekt från ett annat objekt.Inget sådant begrepp.
ÖverladdningKonstruktörer kan vara överbelastade.Destructor kan inte överbelastas.

Definition av konstruktör:

En konstruktör är i grunden en medlemsfunktion i klassen, som initierar objektet och allokerar minne till det. Konstruktörer kan enkelt identifieras som de deklareras och definieras med samma namn som klassens. En konstruktör har ingen returtyp; så återvänder de inte någonting, inte ens "tomrum". En konstruktör definieras alltid i den offentliga delen av en klass.

Det kan finnas flera konstruktörer i en klass; De kan särskiljas baserat på antal och typ av argument som passerat. Om det finns flera konstruktörer i en klass implicit konstruktör (do-nothing constructor) måste definieras tillsammans med dem; det gör ingenting men uppfyller kompilatorn.

Konstruktörer kan också definieras med standardargumenten. Medan de också initierar objektet "dynamiskt". Konstruktörer kan varken vara ärvda, det kan heller inte vara virtuellt men de kan vara överbelastade. De kan inte hänvisas till deras adress.

Implementering av konstruktör:

 klass Const {int a, b; allmän: Const () {// konstruktör utan parameter a = 0; b = 0; } Const (int c, int d) {// konstruktör med parameter a = c; c = d; }}; int huvud () {Const C1; C2 (10, 20); // detta påstående åberopar konstruktör} 

När C1 skapas, kommer en konstruktör utan parameter att utföras, eftersom C1 inte går över någon parameter. När C2 skapas, utförs en konstruktör med parametern exekverad, eftersom den passerar två heltal till konstruktören.

Definition av Destructor:

En Destructor är också en medlemsfunktion i en klass, som avallokerar minnet som är allokerat till ett objekt. Den definieras med samma namn som en klass, föregås av en tilde (~) symbol. Destruktorer kallas alltid i motsatt ordning av konstruktörerna.

Det finns alltid en enda destructor i en klass, eftersom det inte accepterar några argument. Lokala objekt förstörs så snart kontrollen av utförandet hämmar blocket; Å andra sidan förstörs globala objekt när hela programmet avslutas. En destructor kallas implicit av en kompilator. Om klasserna är ärvda, och en klass härleds från föräldraklassen och både barnklassen och en förälderklass har destruktorer; då kallas förstöraren av den härledda klassen först, följt av förälderklassens destruktor.

Implementering av Destructor:

 klass Const {int a, b; allmän: Const (int c, int d) {// konstruktör med parameter. a = c; c = d; cout << "värdet av a och b är" < 

När C1-objekt skapas, åberopas en konstruktor med två parametrar av heltalstyp och medlemmen "a, b" initialiseras när värdet av "a, b" skrivs ut. Därefter får destructor åberopa och skriva ut meddelandet "objekt C1 blir förstört".

Huvudskillnad mellan byggare och destruktorer

  1. Huvudsyftet med en konstruktör är att allokera minne till objekten när de skapas medan huvudformålet med en destructor är att fördela minnet på objektet när det förstörs.
  2. En konstruktör får acceptera argumenten eftersom argumenten kan användas för att initialisera klassens datamedlemmar. En destructor accepterar inte några argument eftersom dess enda arbete är att fördela objektets minne.
  3. En konstruktör kallas när ett objekt skapas. Å andra sidan kallas en destructor när ett program avslutas eller programmet avslutar blocket i vilket objekt skapas.
  4. En konstruktör används i allmänhet för att initialisera klassens datamedlemmar medan en destructor används för att låta objektet utföra någon åtgärd innan den förstörs.
  5. Konstruktörer exekveras i den successiva ordningen, det vill säga om det finns en härledd klass som ärver basklassen och objektet från den härledda klassen skapas så kommer det att ringa konstruktören i basklassen först och därefter konstruktören i härledd klass. Å andra sidan kallas destruktorn av härledd klass först och då betyder basklassen att en destructor exekveras i omvänd ordning av konstruktören.
  6. I klassen kan det finnas flera konstruktörer som identifieras av de givna talargumenten. I klassen finns det bara en destructor.
  7. Det finns ett koncept för kopiekonstruktorn som gör det möjligt för ett objekt att initieras från ett annat objekt medan destructorn inte har något sådant begrepp.
  8. Konstruktörer kan vara överbelastade för att utföra olika åtgärder under samma konstruktörs namn, medan destruktorer inte kan överbelastas.

Slutsats:

Förutom likheten är den konstruktion och destructor klassens speciella medlemsfunktion, och har samma namn, den grundläggande skillnaden bland dem är, "konstruktör" kallas vid tidpunkten för minnesallokering och "destructor" kallas vid tid för objekt minnesfördelning. Både konstruktör och destruktor kallas implicit av kompilatorn trots att de inte definieras i klassen.

Top