Skip to main content

Destructor

Similar to constructor, a class has another special member function called destructor. Destructor cleans up the object.  

When an object goes out of scope, the destructor is automatically called. Destructor is also called when the pointer to the object is released using delete operator.

Destructor has a same name as class and is preceded by tilde (~) symbol. 

Class A has a destructor ~A()
 
Destructor should be used to clean up the object -  release memory and other resources, close files, stop threads etc.

#include <iostream>
using namespace std; 
class Arr
{
 int *elements;
 int len;
public:
 Arr(int len=5);
 ~Arr();//destructor
 int & operator[](int index);
};
Arr::Arr(int len)
{
 elements = new int[len];
}
Arr::~Arr()
{
 delete []elements;
}
int & Arr::operator[](int index)
{
 return elements[index];
} 
int main()
{
 Arr obj(10);
 for(int i=0;i<10;i++)
 obj[i] = i*i; 
} 
 

In the above code, you see the destructor of class Arr, which  releases the memory  allocated by constructor. The object obj is destroyed when main function terminates, and its destructor is called which releases memory.

Destructor takes no parameters. So destructor can not be overloaded.

If there is no user defined destructor, then compiler provides a trivial destructor.

The example shown above uses dynamic memory and hence needs user defined destructor to release memory.

Order of destructor call


Destructor of an object is called when the object is being destroyed - that is when the object goes out of scope.
  1. For global objects, destructor is called at the end of the program.
  2. For local objects, it is called when the block exits.
  3. For parameters and return values, it is called when the function exits.
  4. For dynamically created objects, destructor is called when delete operator is used.
Also note that the order of destructors is the opposite of order of constructors. Which means that the object created last, is destroyed first.

The program below shows the order of destructors.

class A
{
 int num;
public:
 A(int n):num(n){cout<<"constructor"<<n<<endl;}
 ~A()
 {
 cout<<"Destructor";
 }
};
int main()
{
 A obj1(10); 
 if(10>5)
 {
 A obj3(15);
 }
 A obj2(12);
}

The output of the program above will be
constructor10
constructor15
Destructor15
constructor12
Destructor12
Destructor10

Note :
  • Compiler provides the following 4 functions automatically for a class
    1. Default constructor - if the class has no other constructors
    2. Copy Constructor
    3. Destructor
    4. Assignment operator
  • Destructor should be public. If not, objects of class can not be destroyed.
You will find all these notes, quiz and complete programs in Simplified C++ app by Hegdeapps 

Comments

Popular posts from this blog

Operator Overloading

What is operator overloading ? Operator overloading is the process of customizing C++ operators for operands of user defined types.   When you have two objects of a class- num1 and num2 , you can write a function to add them such as  ans = add(num1,num2); That does not look neither simple nor intuitive. You would prefer to write      ans = num1+num2; as you would write expressions for basic data types like integers, floats etc.    This can be done using Operator overloading. Operator overloading lets you write such statements. That is, it lets you call your functions on objects using  +, - ,* etc.    + operator will call addition function on the object (when you write op. overloading function for +). * will call multiply on objects etc. Names of overloaded operator functions start with keyword operator followed by  symbol of the operator. e.g. +, - etc. Unary operator functions take 0 parameters fo...

Your first program

C++ is an object oriented programming language based on C language. C++ was invented by Bjarne Stroustrup in the year 1979.​ Initially Stroustrup called the language as C with classes because it had object oriented features. C++ is a compiled language and is oriented towards systems programming and embedded systems.​ Instead of talking about history of C++, let us write our first C++ program. #include<iostream> using namespace std; int main () { cout << "Hello world" << endl; return 0 ; } main function ​ C++ program must have a main function - which indicates the starting point of the program. Execution of the program begins with main function. ​ int main() - A function can return a value. If it does not return a value, the function is specified as void function. The type of the return value is specified before the function name. In this case main function returns an integer value - it returns 0 to indicate success. Please re...

Find the error in C++ program

This C++ program is not compiling. What do you think is the error with the program? #include<iostream> using namespace std; int main() {    int arr[10];    arr={1,2,3,4,5,6,7,8};    cout<<"arr[0]="<<arr[0];    return 0; } Is the error due to Not using printf Initialising the array with only 8 elements instead of 10 Initialising array in the next statement instead of in definition. None of the above  Now if you like this question, there are plenty more questions like this and programs and notes in my app Simplified C++. Download the Simplif ied C++   by Hegdeapps now By the way the correct answer is (3)