Sobes.tech
Back to questions
Junior — Middle
92

Какие отличия между операторами free() и delete() в языке C++?

Companies where asked
Открытые РешенияОткрытые Решения

Answer from AI

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(). Всегда нужно соответствовать способ выделения и освобождения памяти.