Top.Mail.Ru
Ответы

Чем отличается free от delete[ ] C++

для наглядности код
#include <iostream>
#include <conio.h>
using namespace std;


void operator delete(void* pointer){
char* data = (char*) pointer;
int i;
for (i = 0; i < 100; i++)
data[i] = 0;
cout << "Secret v bezopasnosty!" << endl;
free(pointer);
}


void main(void){
char* pointer = new char[100];
strcpy(pointer, "Secrety moey kompaniy");
delete pointer;

char ch = getchar();
}

По дате
По рейтингу
Аватар пользователя
Новичок
11лет

delete вызывает деструктор, free этого делать не умеет.

Аватар пользователя
Знаток
11лет

free пара к malloc/calloc, delete пара к new, delete [] пара к new [] и смешивать их UB

Аватар пользователя
Гуру
11лет

free осталось от языка C, используется с функциями calloc, malloc, realloc. Оператор delete следует использовать с оператором new ("оператор" - неправильный перевод английского слова "operator", лучше перевести "операция"

delete вызывает деструктор, free нет. Поэтому использовать пару malloc/free для классов нельзя (+malloc не вызывает конструктор, к тому же, и не разбирается с виртуальными методами) . Вполне допустимо в коде использовать для классов пару new/delete, а для простых переменных - malloc/free. Только зачем, new/delete может работать как с классами, так и с обычными переменными. а) нельзя удалить память, выделенную оператором new, с помощью free, можно только с помощью delete;б) нельзя удалить память, выделенную оператором malloc, с помощью delete, можно только с пом, free;в) delete гибче.

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