Деструктор, одна из двух основных функций каждого класса, наравне с конструктором. По функционалу деструктор диаметрально противоположен тому же конструктору, вызываясь при отмене выделения памяти на объект (при удалении объекта). Объявить функцию класса как деструктор просто, имя класса с тильдой (~) и пустыми скобками, например, ~MyClass() для класса MyClass. При объявлении деструктора нужно придерживаться нескольких правил:
- Деструктор ничего не возвращает по самой идее своего назначения, то есть присваивать ему тип (даже специальный тип void) или писать в теле функции return нельзя.
- Аналогичный запрет на ключи const, static и другие в объявлении. Деструктор хоть и освобождает объекты с такими ключами, но сам объявляться с ними не должен.
- Деструктор не должен иметь каких-либо параметров.
Приведем простой пример класса и его деструктора.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Ques { public: Ques(); ~Ques(); private: char* text1; char* text2; }; Ques:: Ques () { text1 = new char; text2 = new char; }; Ques::~Ques () { delete[] text1; delete[] text2; }; |
В примере конструктор класса выделяет память на text1 и text2, а деструктор эту память освобождает. Освобождение внутри класса происходит обратно выделению памяти, то есть если сначала память выделили на text1, а потом на text2, то освобождение начнется с text2.