Если я запрограммировал — не зная это — утечка памяти, и приложение завершается, пропущенная память освобождена?
Да, «утечка памяти» - это просто память, на которую процесс больше не ссылается и, следовательно, больше не может освобождаться. ОС по-прежнему отслеживает всю память, выделенную процессу, и освобождает ее, когда этот процесс завершается.
В подавляющем большинстве случаев ОС освобождает память - как в случае с обычными «разновидностями» Windows, Linux, Solaris и т. Д. Однако важно отметить, что в специализированных средах, таких как различные среды реального времени Операционные системы память не может быть освобождена при завершении программы.
Используете ли вы настольную ОС (Windows, Linux и т. Д.)? Если да, то, как правило, при выходе из программы система освобождает всю память, связанную с программой.
Обычно да. Некоторые системы поддерживают такие вещи, как блоки разделяемой памяти, которые не освобождаются автоматически при выходе из программы. Большинство по-прежнему ведут счетчик ссылок и удаляют его, когда все программы, открывшие его, завершают работу, но некоторые этого не делают (например, в 16-битной Windows было несколько типов элементов, которые оставались бы выделенными, даже если к ним ничего не относилось - хотя обычно он ломался по другим причинам, прежде чем накопилось достаточно, чтобы вызвать проблему ...)
Насколько я знаю, современная операционная система освободит эту память после завершения работы программы.
Зависит от того, из какой памяти произошла утечка. Операционная система не может освободить часть памяти. Однако большая часть памяти в большинстве ОС будет автоматически освобождена при выходе из процесса.
ОС, выполняющая вашу программу, обычно очищает память, которая не освобождается явно, и обрабатывает, что явно не закрывается, но это не гарантируется стандартом C ++. Вы можете найти какое-то встроенное устройство, которое не освобождает утечки памяти.
При этом Windows и все дистрибутивы Linux, которые я когда-либо видел, освобождают утечки памяти.
Вы можете легко создать огромный цикл утечек памяти, чтобы проверить это самостоятельно. Наблюдайте за ростом использования ОЗУ, а затем закройте программу. Вы увидите, что использование ОЗУ снова снизилось.
Еще одно соображение при использовании C ++ заключается в том, что если вы не удаляете память, выделенную в куче, ваши деструкторы также не вызываются. Иногда у вас будут и другие побочные эффекты, если ваши деструкторы не будут вызваны.