Lad os se nogle af de grundlæggende forskelle mellem konstruktør og destruktor ved hjælp af sammenligningsdiagrammet
Sammenligningstabel:
Grundlag for sammenligning | Constructor | Destructor |
---|---|---|
Formål | Det tildeler hukommelsen til en genstand. | Det forkaster hukommelsen til et objekt. |
Erklæring | klassenavn (eventuelle argumenter) {}; | ~ klassenavn (ingen argumenter) {}; |
argumenter | Konstruktor accepterer argument | Destructor accepterer ikke noget argument. |
Ringer | Konstruktør kaldes automatisk, mens objektet er oprettet. | Destructor kaldes automatisk, da blokken er afsluttet eller programmet afslutter. |
Arbejder | Constructor tillader objekt at initialisere nogle af dens værdi før, den bruges. | Destructor tillader objekt at udføre nogle kode på tidspunktet for dens ødelæggelse. |
Kendelse af fuldbyrdelse | Konstruktor kaldes i rækkefølge. | Destructor kaldes i omvendt rækkefølge af konstruktør. |
I tal | Der kan være flere konstruktører i klassen. | Men der er altid en enkelt destructor i klassen. |
Kopier Konstruktør | Kopier konstruktør tillader en konstruktør at erklære og initialisere et objekt fra et andet objekt. | Intet sådant begreb. |
Over loading | Konstruktører kan overbelastes. | Destructor kan ikke overbelastes. |
Definition af Constructor:
En konstruktør er grundlæggende en medlemsfunktion af klassen, som initialiserer objektet og allokerer hukommelse til det. Konstruktører kan let identificeres som de erklæres og defineres med samme navn som klassens. En konstruktør har ingen returtype; så vender de ikke noget tilbage, ikke engang 'tomrum'. En konstruktør defineres altid i den offentlige del af en klasse.
Der kan være flere konstruktører i en klasse; de kan skelnes ud fra antallet og typen af argumenter, der er bestået. Hvis der er flere konstruktører i en klasse; implicit konstruktør (do-nothing constructor) skal defineres sammen med dem; det gør ingenting, men opfylder kompilatoren.
Konstruktører kan også defineres med standardargumenterne. Mens de også initialiserer objektet "dynamisk". Konstruktører kan hverken være arvet, og det kan heller ikke være virtuelt, men de kan overbelastes. De kan ikke henvises til deres adresse.
Implementering af konstruktør:
klasse Const {int a, b; offentlig: Const () {// konstruktør uden parameter a = 0; b = 0; } Const (int c, int d) {// konstruktor med parameter a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // denne erklæring påberåber konstruktør}
Når C1 oprettes, udføres en konstruktør uden parameter, da C1 ikke overgår nogen parameter. Hvor når C2 er oprettet, bliver en konstruktør med parameter udført, da den passerer to heltal til konstruktoren.
Definition af Destructor:
En destructor er også en medlemsfunktion af en klasse, som deallokerer hukommelsen tildelt til en objekt. Det er defineret med samme navn som en klasse, forud for et tilde (~) symbol. Destruktorer kaldes altid i omvendt rækkefølge af konstruktørerne.
Der er altid en enkelt destructor i en klasse, da den ikke accepterer argumenter. Lokale objekter ødelægges, så snart kontrollen af udførelsen løfter blokken; På den anden side ødelægges globale objekter, når hele programmet afslutter. En destructor kaldes implicit af en kompilator. Hvis klasserne er arvet, og en klasse er afledt af forældrenes klasse, og både barneklassen og en forældersklasse har destruktorer; så kaldes destruktoren af den afledte klasse først, efterfulgt af moderklassens destruktor.
Implementering af Destructor:
klasse Const {int a, b; offentligt: Const (int c, int d) {// constructor med parameter. a = c; c = d; cout << "værdien af a og b er" <Når C1-objekt er oprettet, kaldes en konstruktor med to parametre af heltalstype og medlemmet "a, b" initialiseres efter at værdien af "a, b" er trykt. Derefter bliver destruktoren påkaldt og udskrevet meddelelsen "objekt C1 bliver ødelagt".
Nøgleforskel mellem bygherrer og destruktorer
- Hovedformålet med en konstruktør er at allokere hukommelse til objekterne, når de oprettes, mens hovedformålet med en destructor er at allokere hukommelsen af objektet, når det ødelægges.
- En konstruktor må acceptere argumenterne, da argumenterne kan bruges til at initialisere dataelementerne i klassen. En destruktor accepterer ikke nogen argumenter, da det eneste arbejde der er at allokere objektets hukommelse.
- En konstruktør kaldes, når en objekt oprettes. På den anden side kaldes en destructor, når et program afsluttes, eller programmet afslutter blokken, i hvilket objekt der oprettes.
- En konstruktør bruges generelt til at initialisere dataelementerne i klassen, mens en destructor bruges til at lade objektet udføre nogle handlinger, før det ødelægges.
- Konstruktorer udføres i den efterfølgende rækkefølge, der betyder, at hvis der er en afledt klasse, der arver basisklassen og objektet af den afledte klasse er oprettet, så vil den kalde førstegangskonstruktøren og derefter konstruktøren af afledt klasse. På den anden side kaldes destruktoren af afledt klasse først og derefter baseklassen betyder det, at en destructor udføres i omvendt rækkefølge af konstruktøren.
- I klassen kan der være flere konstruktører, som er identificeret ved de talte argumenter, der er bestået. I klassen er der kun en destructor.
- Der er et koncept af kopikonstruktør, som gør det muligt for et objekt at blive initialiseret fra et andet objekt, mens destruktoren ikke har noget sådant koncept.
- Konstruktører kan være overbelastede til at udføre forskellige handlinger under navnet på samme konstruktør, mens destruktorer ikke kan overbelastes.
Konklusion:
Udover ligheden er denne konstruktør og destruktor klassens specielle medlemsfunktion og har samme navn. Grundforskellen mellem dem er, at "konstruktør" kaldes på tidspunktet for hukommelseallokering og "destructor" kaldes ved Tid for genstande af genstande. Både konstruktør og destruktor kaldes implicit af kompilator, selvom de ikke er defineret i klassen.