Skip to content
Related Articles
Get the best out of our app
GFG App
Open App
geeksforgeeks
Browser
Continue

Related Articles

delete keyword in C++

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Delete is an operator that is used to destroy array and non-array(pointer) objects which are created by new expression.
 

  • Delete can be used by either using Delete operator or Delete [ ] operator
  • New operator is used for dynamic memory allocation which puts variables on heap memory.
  • Which means Delete operator deallocates memory from heap.
  • Pointer to object is not destroyed, value or memory block pointed by pointer is destroyed.
  • The delete operator has void return type does not return a value.

Here, Below are examples where we can apply delete operator:
1. Deleting Array Objects: We delete an array using [] brackets.

CPP




// Program to illustrate deletion of array
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    // Allocate Heap memory
    int* array = new int[10];
     
    // Deallocate Heap memory
    delete[] array;
 
    return 0;
}


2. Deleting NULL pointer : Deleting a NULL does not cause any change and no error.

CPP




// C++ program to deleting
// NULLL pointer
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    // ptr is NULL pointer
    int* ptr = NULL;
 
    // deleting ptr
    delete ptr;
 
    return 0;
}


3. Deleting pointer with or without value

CPP




#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    // Creating int pointer
    int* ptr1 = new int;
     
    // Initializing pointer with value 20
    int* ptr2 = new int(20);
 
    cout << "Value of ptr1 = " << *ptr1 << "\n";
    cout << "Value of ptr2 = " << *ptr2 << "\n";
 
    delete ptr1; // Destroying ptr1
    delete ptr2; // Destroying ptr2
 
    return 0;
}


Output: 

Value of ptr1 = 0
Value of ptr2 = 20

4. Deleting a void pointer

CPP




#include <bits/stdc++.h>
using namespace std;
int main()
{
    void* ptr; // Creating void pointer
 
    delete ptr; // Destroying void pointer
 
    cout << "ptr deleted successfully";
    return 0;
}


Output:  

ptr deleted successfully

5. deleting memory dynamically allocated by malloc 

CPP




#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    // Dynamic memory allocated by using malloc
    int* ptr2 = (int*)malloc(sizeof(int));
 
    delete ptr2;
 
    cout << "ptr2 deleted successfully";
 
    return 0;
}


Output:  

ptr2 deleted successfully

Although above program runs fine on GCC. It is not recommended to use delete with malloc().
6. Deleting variables of User Defined data types:

CPP




#include <bits/stdc++.h>
using namespace std;
 
struct P {
    static void operator delete(void* ptr, std::size_t sz)
    {
        cout << "custom delete for size " << sz <<endl;
        delete (ptr); // ::operator delete(ptr) can also be used
    }
    static void operator delete[](void* ptr, std::size_t sz)
    {
        cout << "custom delete for size " << sz <<endl;
        delete (ptr); // ::operator delete(ptr) can also be used
    }
};
 
int main()
{
    P* var1 = new P;
    delete var1;
 
    P* var2 = new P[10];
    delete[] var2;
}


Output:  

custom delete for size 1
custom delete for size 18

Exceptions:
1. Trying to delete Non-pointer object

CPP




#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int x;
 
    // Delete operator always
    // requires pointer as input
    delete x;
 
    return 0;
}


Output:  

error: type ‘int’ argument given to ‘delete’, expected pointer

2. Trying to delete pointer to a local stack allocated variable. 

CPP




#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int x;
    int* ptr1 = &x;
 
    // x is present on stack frame as
    // local variable, only dynamically
    // allocated variables can be destroyed
    // using delete operator
    delete ptr1;
 
    return 0;
}


Output

Runtime error

My Personal Notes arrow_drop_up
Last Updated : 13 Oct, 2021
Like Article
Save Article
Similar Reads