Другие языки программирования и технологии

Зачем в ООП введены деструкторы класса?

С конструктором как бы всё ясно - предварительная установка свойств экземпляра, пулов методов и т. д., а деструктор? Возможно что, неполное выведение объекта из памяти? Или у них только декоративное назначение, чтобы не выносить код строгого порядка уничтожения куда-то ещё? Проще - есть ли что-то, что невозможно сделать без деструктора? Например в среде lazarus.
Конструктор создаёт объект в памяти, а деструктор его удаляет, тем самым освобождая ресурсы памяти.
Алексей Сивков
Алексей Сивков
89 680
Лучший ответ
Деструкторы нужны для освобождения памяти. Когда объект уничтожается, вместе с ним нужно уничтожить др. объекты, иначе останется мусор. Это необходимо например в C++, где нет сборщика мусора и потому возможны утечки памяти.
Dmitriy. Sh.
Dmitriy. Sh.
70 248
Деструктор нужен чаще всего для освобождение ресурсов, занятых объектом. Например, памяти. Или, если в классе есть элемент-файл, его надо закрыть и это должен делать деструктор. Но можно и без ресурсов - если ведется подсчет числа объектов какого-то класса, то логично добавить увеличение числа этих объектов в конструктор, а уменьшение - в деструктор.
Bаurjan
59 718
Элементарные объекты не содержат созданных динамически объектов в памяти и деструктор можно опустить в описании класса. Но в реальном программировании сложных объектов это не так. Сложные динамические структуры должны быть очищены вместе с объектом: так избегают пресловутой "утечки памяти".Вот зачем нужен деструктор в классе.
Ещё одно примение описал Капитан Гугл : работа со статическими членами класса, действия при удалении объекта.
Объекты часто получают память динамически, когда заранее неизвестно, сколько памяти нужно. Эта память - вне объекта.
И при уничтожении объект должен прибраться за собой.
Собственно, это одна из целей применения объектов - код, управляющий памятью, собран в одном месте. А сам класс можно рассматривать, как тип данных.
деструкторы никакого отношения к ООП не имеют - это специфика языка.
PS. деструкторы могут быть обьектов но не классов.
Али Хисориев
Али Хисориев
6 169