Destructor In C++ | Destructor Example | Constructor and Destructor in C | C++ Programming Examples | C++ Programming Tutorial | C++ Programming Books

Destructor In C++ | Destructor Example | Constructor and Destructor in C | C++ Programming Examples | C++ Programming Tutorial | C++ Programming Books

Destructor In C++ | Destructor Example | Constructor and Destructor in C | C++ Programming Examples | C++ Programming Tutorial | C++ Programming Books

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on The most recent rendition of this subject can be found at Destructors (C++). Destructor” capacities are the reverse of constructor capacities. They are called when objects are annihilated (deallocated). Assign a capacity as a class’ destructor by going before the class name with a tilde (~). For instance, the destructor for class String is announced: ~String(). In a/clr accumulation, the destructor has an exceptional part in discharging oversaw and unmanaged assets. See Destructors and Finalizers in Visual C++ for more data.

The destructor is generally used to “tidy up” when a protest is not any more fundamental. Consider the accompanying assertion of a String class:


#include <string.h>

class String {


String( scorch *ch );/Declare constructor

~String();/and destructor.


scorch *_text;

size_t sizeOfText;


/Define the constructor.

String::String( scorch *ch ) {

sizeOfText = strlen( ch ) + 1;

/Dynamically allot the right measure of memory.

_text = new char[ sizeOfText ];

/If the assignment succeeds, duplicate the instatement string.

on the off chance that( _text )

strcpy_s( _text, sizeOfText, ch );


/Define the destructor.

String::~String() {

/Deallocate the memory that was beforehand held

/for this string.

on the off chance that (_text)

delete[] _text;


int fundamental() {

String str(“The flautist in the glen…”);


In the previous illustration, the destructor String::~String utilizes the erase administrator to deallocate the space progressively distributed for content stockpiling.

Delcaring destructors

Destructors are capacities with an indistinguishable name from the class however went before by a tilde (~)

The principal type of the language structure is utilized for destructors proclaimed or characterized inside a class announcement; the second shape is utilized for destructors characterized outside a class statement.

A few principles oversee the announcement of destructors. Destructors:

Try not to acknowledge contentions.

Can’t determine any arrival sort (counting void).

Can’t restore an esteem utilizing the arrival articulation.

Can’t be proclaimed as const, unpredictable, or static. In any case, they can be summoned for the annihilation of articles proclaimed as const, unpredictable, or static.

Can be proclaimed as virtual. Utilizing virtual destructors, you can devastate objects without knowing their sort — the right destructor for the protest is conjured utilizing the virtual capacity instrument. Note that destructors can likewise be proclaimed as unadulterated virtual capacities for dynamic classes.

Utilizing destructors

Destructors are called when one of the accompanying occasions happens:

A question allotted utilizing the new administrator is unequivocally deallocated utilizing the erase administrator. At the point when objects are deallocated utilizing the erase administrator, memory is liberated for the “most determined protest,” or the question that is an entire question and not a subobject speaking to a base class. This “most-determined protest” deallocation is ensured to work just with virtual destructors. Deallocation may bomb in different legacy circumstances where the sort data does not compare to the fundamental kind of the genuine protest.

A neighborhood (programmed) protest with shut degree leaves scope.

The lifetime of an impermanent protest closes.

A program closes and worldwide or static articles exist.

The destructor is expressly called utilizing the destructor capacity’s completely qualified name. (For more data, see Explicit Destructor Calls.)

The cases portrayed in the former rundown guarantee that all items can be pulverized with client characterized strategies.

In the event that a base class or information part has an open destructor, and if an inferred class does not proclaim a destructor, the compiler creates one. This compiler-produced destructor calls the base class destructor and the destructors for individuals from the inferred sort. Default destructors are open. (For more data about openness, see Access Specifiers for Base Classes.)

Destructors can unreservedly call class part capacities and access class part information. At the point when a virtual capacity is called from a destructor, the capacity called is the capacity for the class right now being devastated. (For more data, see Order of Destruction.)

There are two confinements on the utilization of destructors. The principal confinement is that you can’t take the address of a destructor. The second is that inferred classes don’t acquire their base class’ destructors. Rather, as beforehand clarified, they generally abrogate the base class’ destructors.

Request of obliteration

At the point when a protest leaves scope or is erased, the grouping of occasions in its total pulverization is as per the following:

The class’ destructor is called, and the body of the destructor work is executed.

Destructors for nonstatic part questions are brought in the turn around arrange in which they show up in the class presentation. The discretionary part instatement list utilized as a part of development of these individuals does not influence the request of (development or) devastation. (For more data about introducing individuals, see Initializing Bases and Members.)

Destructors for nonvirtual base classes are brought in the switch request of assertion.

Destructors for virtual base classes are brought in the switch request of assertion.


Thanks for reading this post and don’t forget to share it and keep visits for more updates

About Ashok.cse

Hi, I'm currently studying for the Bachelor of Technology In Computer Science from Rajasthan Technical University. I am the web developer with 3+ years of experience. my range of developer services including creating the design for new apps and web platforms or building UI design for mobile, tablets or desktops. making UX designs wireframes and layouts concepts and redesigns websites are adapting to mobile and responsive design. I have worked with many clients. I am working professionally with WordPress And Adobe tools.

View all posts by Ashok.cse →

Leave a Reply

Your email address will not be published. Required fields are marked *