Назад к вопросам
Открытые Решения
Junior — Middle
93
Какие отличия между операторами free() и delete() в языке C++?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Основные отличия между операторами free() и delete() в C++:
-
free()— это функция из языка C, которая освобождает память, выделенную с помощьюmalloc(),calloc()илиrealloc(). Она просто освобождает блок памяти, не вызывая деструкторы объектов. -
delete— оператор C++, который освобождает память, выделенную с помощьюnew, и при этом вызывает деструктор объекта, что важно для корректного освобождения ресурсов.
Пример:
class MyClass {
public:
~MyClass() { std::cout << "Destructor called" << std::endl; }
};
// Правильно:
MyClass* obj = new MyClass();
delete obj; // вызовет деструктор и освободит память
// Неправильно:
MyClass* obj2 = (MyClass*)malloc(sizeof(MyClass));
free(obj2); // деструктор не вызовется, возможны утечки ресурсов
Использовать free() для объектов C++ опасно, так как деструкторы не вызываются, что может привести к утечкам ресурсов. Аналогично, delete нельзя применять к памяти, выделенной через malloc(). Всегда нужно соответствовать способ выделения и освобождения памяти.