In this C++ tutorial, you will learn about Class Destructor, how to define it, and how it works, with example programs.
C++ Destructor
C++ Destructor is a function in a class that is called when an object instance of this class type is destroyed.
There are two types of destructors based on whether the destructor is explicitly defined in a class or not.
- Default Destructor
- User-defined Destructor
Syntax
The syntax of a destructor function for a class A
is
~A() { //body }
Please notice the tilda symbol ~
before the destructor name.
Programmer has to remember the following points while creating a user defined destructor.
- Name of destructor must be same as that of class.
- There can be only one destructor defined for a class.
- A destructor must be declared public.
- A destructor cannot be static or const.
- A destructor function does not have any parameters.
- A destructor function does not have any return type.
Default Destructor
If there is not destructor defined in the class, compiler creates a default destructor for the class.
Example
For example, in the following program, we have a class A
defined with no destructor. But, when an object instance of this type has to be destroyed, compiler calls the default destructor implicitly.
C++ Program
#include <iostream> using namespace std; class A { public: int x; A(int _x) { x = _x; } }; void function1() { A a1(3); } int main() { function1(); }
In this program, we created an object a1
of type A
in function1(). When the program control comes out of function1(), the scope of a1
is ended. Since the object becomes obsolete, the compiler destroys it. Since, we have not defined a destructor in class A
, compiler creates a default destructor and takes care of the object with destruction.
User-defined Destructor
Programmer has a choice to define a destructor. In fact, it is a good idea to define a destructor when the class objects has pointers or has dynamically allocated memory. Because, a default destructor does not free the pointer or dynamically allocated memory, and this may result in memory leak.
Example
In the following program, we define a class with a pointer as a member. In the destructor function, we des
C++ Program
#include <iostream> using namespace std; class A { public: char* x; ~A() { delete x; cout << "Object destroyed successfully." << endl; } }; void function1() { A a1 = A(); char* y = new char[1024]; a1.x = y; } int main() { function1(); }
Output
Object destroyed successfully. Program ended with exit code: 0
Conclusion
In this C++ Tutorial, we learned what a destructor is, what are its properties, when is the destructor invoked, what compiler does when there is no default destructor, and how to define a destructor and override default behaviour, with the help of examples.