Динамічне виділення пам'яті для об'єкта створює необхідність звільнення|визволення| цієї пам'яті під час знищення об'єкта. Наприклад, якщо об'єкт формується як локальний усередині блока, то доцільно, щоб під час виходу з|із| блока, коли вже об'єкт перестає існувати, виділена для нього пам'ять була повернена. Бажано, щоб звільнення|визволення| пам'яті відбувалося|походило| автоматично. Таку можливість|спроможність| забезпечує спеціальний компонент класу – деструктор класу. Його формат:
~ім’я_класу(){ оператори_тіла_деструктора}
Ім'я деструктора співпадає|збігається| з|із| ім'ям його класу, але|та| передує символом “~” (тильда).
Деструктор не має параметрів і не повертає ніякого значення. Виклик
деструктора виконується неявно (автоматично), як тільки об'єкт класу знищується.
Наприклад, під час виходу за область визначення або під час виклику оператора delete для покажчика на об'єкт:
string *p=new string (“рядок”);
delete p;
Якщо у класі деструктор не визначено явно, то компілятор генерує деструктор за умовчанням, який просто звільняє|визволяє| пам'ять, зайняту|позичену,посісти| даними об'єкта. У тих випадках, коли потрібно виконати звільнення|визволення| й інших об'єктів пам'яті, наприклад область, на яку вказує|вказує| ch в об'єкті string, необхідно визначити деструктор явно: ~string(){delete []ch;}
Так само, як і для конструктора, не може бути визначено покажчик на деструктор.