Aanbevolen, 2024

Editor'S Choice

Verschil tussen Constructor en Destructor

Soms is het vereist om een ​​deel van een object te initialiseren voordat het kan worden gebruikt. We werken bijvoorbeeld op de stapel, voordat we enige actie uitvoeren, moet de bovenkant van de stapel altijd op nul worden gezet. Deze functie van automatische initialisatie wordt uitgevoerd via 'Constructor'. Waarschijnlijk als een object een code moet uitvoeren voordat het wordt vernietigd. Bijvoorbeeld, als een object een bestand dat het had geopend moest sluiten voordat het werd vernietigd. Het kan worden uitgevoerd met behulp van 'Destructor'.

Laten we een overzicht geven van enkele basisverschillen tussen constructeur en destructor met behulp van een vergelijkingsgrafiek

Vergelijkingstabel:

Basis voor vergelijkingbouwerdestructor
Doel
Het wijst het geheugen toe aan een object.Het deallocates het geheugen van een object.
Verklaringclass_name (argumenten indien aanwezig) {};~ class_name (geen argumenten) {};
argumentenConstructor accepteert argumentDestructor accepteert geen argumenten.
RoepingConstructor wordt automatisch aangeroepen, terwijl het object wordt gemaakt.Destructor wordt automatisch opgeroepen, omdat het blok wordt afgesloten of het programma wordt beëindigd.
WerkenConstructor staat toe dat het object een deel van zijn waarde eerder initialiseert, het wordt gebruikt.Destructor staat toe dat een object een code uitvoert op het moment van vernietiging.
Volgorde van uitvoering
Constructor wordt in opeenvolgende volgorde genoemd.
Destructor worden in omgekeerde volgorde van constructor genoemd.
In cijfersEr kan meerdere constructor in de klas zijn.Maar er is altijd een enkele destructor in de klas.
Kopieer ConstructorConstructor kopiëren maakt het voor een constructor mogelijk een object uit een ander object te declareren en te initialiseren.Geen dergelijk concept.
Over het ladenConstructeurs kunnen overbelast zijn.Destructor kan niet worden overbelast.

Definitie van Constructor:

Een constructor is in feite een lidfunctie van klasse, die het object initialiseert en er geheugen aan toewijst. Constructors kunnen eenvoudig worden geïdentificeerd zoals ze worden gedeclareerd en gedefinieerd met dezelfde naam als die van de klasse. Een constructor heeft geen retourtype; dus keren ze niets terug, zelfs niet 'leeg'. Een Constructor wordt altijd gedefinieerd in het openbare gedeelte van een klasse.

Er kunnen meerdere constructeurs in een klasse zijn; ze kunnen worden onderscheiden op basis van het aantal en het type doorgegeven argumenten. Als er meerdere constructors in een klasse zijn; impliciete constructor (do-nothing constructor) moet samen met hen worden gedefinieerd; het doet niets anders dan, voldoet aan de compiler.

Constructors kunnen ook worden gedefinieerd met de standaardargumenten. Terwijl ze het object ook "dynamisch" initialiseren. Constructors kunnen noch worden overgenomen, noch kunnen ze virtueel zijn, maar ze kunnen worden overbelast. Ze kunnen niet naar hun adres worden verwezen.

Implementatie van constructor:

 class Const {int a, b; public: Const () {// constructor zonder parameter a = 0; b = 0; } Const (int c, int d) {// constructor met parameter a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // deze verklaring roept constructeur op} 

Wanneer C1 wordt gemaakt, wordt een constructor zonder parameter uitgevoerd, omdat C1 geen parameter doorgeeft. Terwijl C2 wordt gemaakt, wordt een constructor met parameter uitgevoerd, omdat deze twee gehele getallen doorgeeft aan de constructor.

Definitie van Destructor:

Een destructor is ook een lidfunctie van een klasse, die het aan een object toegewezen geheugen dealloceert. Het is gedefinieerd met dezelfde naam als die van een klasse, voorafgegaan door een tilde (~) symbool. Destructors worden altijd in de omgekeerde volgorde van de constructeurs genoemd.

Er is altijd een enkele destructor in een klasse, omdat er geen argumenten worden geaccepteerd. Lokale objecten worden vernietigd zodra de controle over de uitvoering het blok verlaat; aan de andere kant worden globale objecten vernietigd wanneer het hele programma eindigt. Een destructor wordt impliciet aangeroepen door een compiler. Als de klassen zijn overgenomen en een klasse is afgeleid van de bovenliggende klasse en zowel de onderliggende klasse als een bovenliggende klasse destructors hebben; dan wordt de destructor van de afgeleide klasse het eerst genoemd, gevolgd door de destructor van de ouderklasse.

Implementatie van Destructor:

 class Const {int a, b; public: Const (int c, int d) {// constructor met parameter. a = c; c = d; cout << "waarde van a en b zijn" < 

Wanneer het C1-object wordt gemaakt, wordt een constructor met twee parameters van een geheel-getaltype aangeroepen en wordt het lid "a, b" geïnitialiseerd en wordt de waarde van "a, b" afgedrukt. Daarna wordt de destructor aangeroepen en wordt het bericht "object C1 wordt vernietigd" afgedrukt.

Belangrijkste verschil tussen constructeurs en destructors

  1. Het belangrijkste doel van een constructor is om geheugen toe te wijzen aan de objecten wanneer deze worden gemaakt, terwijl het belangrijkste doel van een destructor is om de herinnering aan het object te dealloceren wanneer het wordt vernietigd.
  2. Een constructor mag de argumenten accepteren omdat de argumenten kunnen worden gebruikt om de gegevensleden van de klasse te initialiseren. Een destructor accepteert geen argumenten omdat het enige werk is om de herinnering aan het object te de-alloceren.
  3. Een constructor wordt aangeroepen wanneer een object wordt gemaakt. Aan de andere kant wordt een destructor aangeroepen wanneer een programma wordt beëindigd of het programma het blok verlaat waarin het object is gemaakt.
  4. Een constructor wordt over het algemeen gebruikt om de gegevensleden van de klasse te initialiseren, terwijl een destructor wordt gebruikt om het object enige actie te laten uitvoeren voordat het wordt vernietigd.
  5. Constructors worden in de opeenvolgende volgorde uitgevoerd, wat betekent dat als er een afgeleide klasse is die de basisklasse overneemt en het object van de afgeleide klasse wordt gemaakt, dan wordt eerst de constructor van de basisklasse aangeroepen en vervolgens de constructor van de afgeleide klasse. Aan de andere kant wordt de destructor van de afgeleide klasse eerst genoemd en vervolgens de basisklasse betekent dit dat een destructor wordt uitgevoerd in omgekeerde volgorde van de constructor.
  6. In de klas kunnen er meerdere constructeurs zijn die worden geïdentificeerd door het aantal doorgegeven argumenten. In de klas is er maar één destructor.
  7. Er is een concept van een copy constructor waarmee een object kan worden geïnitialiseerd vanuit een ander object, terwijl de destructor geen dergelijk concept heeft.
  8. Constructors kunnen overbelast zijn om verschillende acties uit te voeren onder de naam van dezelfde constructor terwijl destructors niet kunnen worden overbelast.

Conclusie:

Naast de overeenkomst, zijn die constructor en destructor de speciale ledenfunctie van een klasse, en bezitten dezelfde naam, het fundamentele verschil tussen beide is dat 'constructor' wordt opgeroepen op het moment van geheugentoewijzing en 'destructor' wordt opgeroepen bij de tijd van geheugenverwijdering van objecten. Zowel de constructor als de destructor worden impliciet aangeroepen door de compiler, ook al zijn ze niet in de klasse gedefinieerd.

Top