Краткий ответ - «нет».Даже программа в DOS много лет назад освобождала память при завершении программы (просто потому, что ничто не управляло памятью, когда программа остановилась).Я уверен, что кто-то может заметить, что код режима ядра не обязательно освобождает его память при выходе из приложения, или они могут сослаться на неясную встроенную ОС .... но вы можете предположить, что app-exit возвращает всю память, которую приобрел код режима пользователя,(Windows 3.x могла иметь эту проблему в зависимости от того, какой распределитель использовался ...)
Причина того, что вы «должны освободить свою память», заключается в том, что для крупномасштабной разработки программного обеспечения вы должны стремитьсяразрабатывать гибкие в использовании компоненты, потому что вы никогда не знаете, как кто-то еще изменит использование вашего кода после того, как вы покинули команду.
Подумайте об этом так.Допустим, вы разрабатываете некоторый класс, который разработан как одноэлементный (создается только один раз за время жизни приложения).Таким образом, вы решаете не беспокоиться об очистке памяти, когда ваш компонент разрушается или завершается.Это идеальное решение на тот момент.Спустя годы, после того как вы ушли на более зеленые пастбища, кто-то другой может прийти и решить, что ему нужно использовать ваш класс в нескольких местах, так что многие экземпляры будут приходить и уходить в течение жизни приложения.Ваша утечка памяти станет их проблемой.
В моей команде мы часто говорили о том, что пользователь должен инициировать «закрытие» приложения просто путем выхода из системы () без какой-либо очистки.Если мы когда-нибудь сделаем это, я бы по-прежнему требовал, чтобы команда разработала классы и компоненты, которые должным образом очищаются после себя.