Шаблоны деструкторов в программной архитектуре - PullRequest
0 голосов
/ 27 апреля 2019

Так же, как Фабричный шаблон , Шаблон строителя и т. Д. Шаблоны создания .

Существует ли какой-либо образец деструктора ?

Если есть ... назовите несколько.

1 Ответ

2 голосов
/ 27 апреля 2019

В языках с ручным управлением памятью, таких как C ++, деструктор существует для очистки ресурсов, таких как выделенные объекты, дескрипторы открытых файлов и т. Д.

Если объект A имеет ссылку на объект B и A является ответственным за жизненный цикл B , то в его деструктор A должен вызвать удалить B , так что его деструктор называется так далее. Это гарантирует, что все объекты, выделенные как часть A , будут удалены, и память будет возвращена системе, в противном случае вы получите утечки памяти.

В языках с автоматическим управлением памятью (сборкой мусора) нет необходимости для объекта удалять других содержащихся в нем объектов, поскольку система удалит все неиспользуемые объекты.

В этих языках объекты по-прежнему могут распределять ресурсы, такие как файлы, получать блокировки, запускать таймеры и т. Д., Поэтому требуется действие, когда они больше не нужны для освобождения этих ресурсов.

На этих языках Используется шаблон Dispose .

В общем случае этот шаблон состоит из метода (Close, Destroy, Release и т. Д.), Который освобождает эти ресурсы и должен вызываться. Обычно он используется в блоке finnaly {} конструкции try {} catch {} finnaly {}.

C # имеет интерфейс IDisposable , который можно использовать вместе с объявлением with , поэтому он имеет встроенную поддержку для него.

У меня нет большого опыта работы с Java, насколько я знаю, что Java 7 представила AutoClosable , но она используется с try {} finally {}

В C # вы также можете добавить финализатор, который вызывается при сборке мусора. Вы можете использовать этот финализатор для освобождения ресурсов или добавления утверждений о том, что объект был правильно расположен перед GC для обнаружения ошибок. Я использовал его для выявления ошибок объектов, которые выделяют важные ресурсы, и трудно определить, откуда появляются ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...