Deletion of array of objects in C++ - GeeksforGeeks

18 Jan, 2021

Need for deletion of the object:
To avoid memory leak as when an object is created dynamically using new, it occupies memory in the Heap Section.
If objects are not deleted explicitly then the program will crash during runtime.
Program 1: Create an object of the class which is created dynamically using the new operator and deleting it explicitly using the delete operator:
C++
 

 
 










// C++ program to create an object 
// dynamically and  delete explicitly 
#include <iostream> 
using namespace std; 
  
// Class 
class Student { 
  
public: 
    // Constructor 
    Student() 
    { 
        cout << "Constructor is called!\n"; 
    } 
  
    // Destructor 
    ~Student() 
    { 
        cout << "Destructor is called!\n"; 
    } 
  
    // Function to display the message 
    void write() 
    { 
        cout << "Writing!\n"; 
    } 
}; 
  
// Driver Code 
int main() 
{ 
    // Create an array of objects 
    Student* student = new Student(); 
  
    // Function Call to write() 
    // using instance 
    student->write(); 
  
    // De-allocate the memory 
    // explicitly 
    delete student; 
  
    return 0; 
}






Constructor is called!
Writing!
Destructor is called!

Program 2: Create an array of objects using the new operator dynamically. Whenever an array of the object of a class is created at runtime then it is the programmer’s responsibility to delete it and avoid a memory leak:
C++
 

 
 










// C++ program to create an array of 
// objects and deleting it explicitly 
#include <iostream> 
using namespace std; 
  
// Class 
class Student { 
  
public: 
    // Constructor 
    Student() 
    { 
        cout << "Constructor is called!\n"; 
    } 
  
    // Destructor 
    ~Student() 
    { 
        cout << "Destructor is called!\n"; 
    } 
  
    // Function to display message 
    void write() 
    { 
        cout << "Writing!\n"; 
    } 
}; 
  
// Driver Code 
int main() 
{ 
    // Create an array of the object 
    // dynamically 
    Student* student = new Student[3]; 
  
    // Function Call to write() 
    student[0].write(); 
    student[1].write(); 
    student[2].write(); 
  
    // De-allocate the memory 
    // explicitly 
    delete[] student; 
  
    return 0; 
}






Constructor is called!
Constructor is called!
Constructor is called!
Writing!
Writing!
Writing!
Destructor is called!
Destructor is called!
Destructor is called!

Program 3:
Below is the program where delete is used to delete an array of objects:
C++
 

 
 










// C++ program to delete array of 
// objects 
#include <iostream> 
using namespace std; 
  
// Class 
class Student { 
  
public: 
    // Constructor 
    Student() 
    { 
        cout << "Constructor is called!\n"; 
    } 
  
    // Destructor 
    ~Student() 
    { 
        cout << "Destructor is called!\n"; 
    } 
  
    // Function to display message 
    void write() 
    { 
        cout << "Writing!\n"; 
    } 
}; 
  
// Driver Code 
int main() 
{ 
    // Create an object dynamically 
    Student* student = new Student[3]; 
  
    // Function call to write() 
    student[0].write(); 
    student[1].write(); 
    student[2].write(); 
  
    // De-allocate the memory 
    // explicitly 
    delete student; 
  
    return 0; 
}






Explanation: This program will crash in runtime. In this program, constructors are working properly but the destructor is executed only for the first object, and after that program is crashing at runtime because of a memory leak. It is because 3 objects are created at runtime but only one object is deleted explicitly and that’s why the remaining two objects are crashing at runtime.
Conclusion:In C++, the single object of the class which is created at runtime using a new operator is deleted by using the delete operator, while the array of objects is deleted using the delete[] operator so that it cannot lead to a memory leak.

C Basics


CPP-Basics


new and delete


C++


C++ Programs

Writing code in comment? 
                                    Please use ide.geeksforgeeks.org, 
                                    generate link and share the link here.
                                
Operator Overloading in C++
Polymorphism in C++
Sorting a vector in C++
Friend class and function in C++
Pair in C++ Standard Template Library (STL)
Header files in C/C++ and its uses
How to return multiple values from a function in C or C++?
C++ Program for QuickSort
Program to print ASCII Value of a character
Sorting a Map by value in C++ STL