удалить и освободить() в C++
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; } |
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.