В C++ существует два вида оператора
deleteОдиночный
delete (delete ptr) – удаляет один объект. Массивный
delete[] (delete[] ptr) – удаляет массив объектов. Использование неправильного вида
delete может привести к неопределённому поведению (UB). 🟠Одиночный `delete`
Используется для удаления одного объекта, созданного через
new. #include <iostream>
class Test {
public:
Test() { std::cout << "Constructor\n"; }
~Test() { std::cout << "Destructor\n"; }
};
int main() {
Test* obj = new Test(); // Выделяем память для одного объекта
delete obj; // Вызывается деструктор, память освобождается
}
🟠Массивный `delete[]`
Используется для удаления массива объектов, созданного через
new[]. #include <iostream>
class Test {
public:
Test() { std::cout << "Constructor\n"; }
~Test() { std::cout << "Destructor\n"; }
};
int main() {
Test* arr = new Test[3]; // Выделяем массив из 3 объектов
delete[] arr; // Вызываются 3 деструктора, освобождается память
}
🟠Что будет, если забыть `[]` при удалении массива?
Если использовать
delete вместо delete[], будет вызван только один деструктор, а память массива не будет полностью освобождена, что приведёт к утечке памяти. Test* arr = new Test[3];
delete arr; // ❌ Не все деструкторы вызываются, UB!
Ставь 👍 и забирай 📚 Базу знаний