удалить и освободить() в C++

Опубликовано: 15 Сентября, 2022

delete и free() в языках программирования имеют схожие функциональные возможности, но они разные. В C++ оператор удаления следует использовать только для указателей, указывающих на память, выделенную с помощью оператора new, или для указателя NULL, а free() следует использовать только либо для указателей, указывающих на память, выделенную с помощью malloc(), либо для нулевого указателя.

Различия между удалением и освобождением:

Удалить()

свободно()

Это оператор. Это библиотечная функция.
Он динамически освобождает память. Это разрушает память во время выполнения.
Его следует использовать только либо для указателей, указывающих на память, выделенную с помощью оператора new , либо для указателя NULL. Его следует использовать только для указателей, указывающих на память, выделенную с помощью malloc() , или для указателя NULL.
Этот оператор вызывает деструктор после того, как он уничтожит выделенную память. Эта функция только освобождает память из кучи. Он не вызывает деструктор.
Это быстрее. Это сравнительно медленнее, чем удаление, поскольку это функция.

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.

Пример оператора удаления:

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;
}

Пример для функции free():

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;
}

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.

C++ C