Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

delete and free() in C++

  • Difficulty Level : Easy
  • Last Updated : 28 Nov, 2021

delete and free() in have similar functionalities programming languages but they are different. In C++, the delete operator should only be used either for the pointers pointing to the memory allocated using new operator or for a NULL pointer, and free() should only be used either for the pointers pointing to the memory allocated using malloc() or for a NULL pointer.

Differences in delete and free are:

Take a step-up from those "Hello World" programs. Learn to implement data structures like Heap, Stacks, Linked List and many more! Check out our Data Structures in C course to start learning today.

delete() 

free()



It is an operator.It is a library function.
It de-allocates the memory dynamically.It destroys the memory at the runtime.
It should only be used either for the pointers pointing to the memory allocated using the new operator or for a NULL pointer.It should only be used either for the pointers pointing to the memory allocated using malloc() or for a NULL pointer.
This operator calls the destructor after it destroys the allocated memory. This function only frees the memory from the heap. It does not call the destructor.
It is faster.It is comparatively slower than delete as it is a function.

Note: The most important reason why free() should not be used for de-allocating memory allocated using new is that, it does not call the destructor of that object while delete operator does.

Example for delete operator:

CPP




// CPP program to demonstrate the correct and incorrect
// usage of delete operator
#include <cstdlib>
#include <iostream>
using namespace std;
  
// Driver Code
int main()
{
    int x;
    int* ptr1 = &x;
    int* ptr2 = (int*)malloc(sizeof(int));
    int* ptr3 = new int;
    int* ptr4 = NULL;
  
    // delete Should NOT be used like below because x is
    // allocated on stack frame
    delete ptr1;
  
    // delete Should NOT be used like below because x is
    // allocated using malloc()
    delete ptr2;
  
    // Correct uses of delete
    delete ptr3;
    delete ptr4;
  
    getchar();
    return 0;
}

Example for free() function:

C++




// CPP program to demonstrate the correct and incorrect
// usage of free() function
#include <cstdlib>
#include <iostream>
using namespace std;
  
// Driver Code
int main()
{
  
    int* ptr1 = NULL;
    int* ptr2;
    int x = 5;
    ptr2 = &x;
    int* ptr3 = (int*)malloc(5 * sizeof(int));
  
    // Correct uses of free()
    free(ptr1);
    free(ptr3);
  
    // Incorrect use of free()
    free(ptr2);
  
    return 0;
}

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!