Программа c ++ автоматически освобождает память при сбое? - PullRequest
7 голосов
/ 19 сентября 2011

Я прочитал в стандартах кодирования Google c ++, что Google не использует исключения. Если исключение не используется, как вы освобождаете память при возникновении ошибок в вашей программе?

Например, f () вызывает g (), и если в g () есть ошибка, я должен освободить всю память, выделенную в g (), а затем вызвать исключение для f (). Как только f () перехватит исключение, f () освободит всю память, выделенную в f (), и выйдет из программы.

Если исключение не используется и если в g () есть ошибка, могу ли я принудительно завершить работу exit(0), и будет ли программа c ++ достаточно умной, чтобы освободить всю выделенную память? Я предполагаю, что, поскольку c ++ поддерживает стек и кучу, и после выхода из программы c ++ автоматически освобождает как стек, так и кучу?

Ответы [ 2 ]

9 голосов
/ 19 сентября 2011

Операционная система очищает всю используемую память и файловые дескрипторы, когда процесс по какой-либо причине завершается.

0 голосов
/ 19 сентября 2011

Я слышал, что некоторые типы памяти, такие как, например, в Windows, глобальная кучевая память COM не могут быть освобождены для вас.Однако большинство памяти / дескрипторов очищены, потому что ОС должна справиться с условием сбоя вашего приложения.Вы, безусловно, можете гарантировать это в случае локальной памяти процесса и большинства дескрипторов, таких как дескрипторы файлов и т. Д. В общем случае вы можете предполагать, что ОС выйдет после вас после очистки приложения.

ТакжеНикогда, никогда не следуйте руководству по стилю Google.Это не для C ++, это для C ++ минус все, что вам нужно отнять, чтобы сделать это C. Это может работать для Google (сомнительно), но определенно не будет работать для всех остальных.

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