Я пишу часть тестового кода в VS2005 следующим образом:
#include <stdio.h>
class Base {
public:
Base() {printf("Base +\n");};
~Base() {printf("Base -\n");};
char val[1024 * 1024 * 100];
};
void main()
{
Base *p = new Base();
return;
}
построить, открыть CMD-окно, а затем выполнить это консольное приложение. открыть диспетчер задач Windows, чтобы посмотреть статус использования памяти.
Я нахожу две вещи: деструктор не называется; 2 нет утечки памяти из результата диспетчера задач Windows.
является ли память удаленной во время выполнения C++, или она удаляется ОС при выходе из процесса? Я просто задаюсь вопросом о том, что происходит с 100 МБ, выделенным в contructor после main() return. Если кто-то может сказать мне, это ценится, и спасибо.
После выхода вашей программы операционная система вернет всю используемую память, независимо от того, был ли вызван ее удаление.
Другие ресурсы, такие как сокеты, могут занять больше времени, которые будут выпущены операционной системой, но в конечном итоге будут исправлены.
Это зависит от операционной системы.
Тем не менее, вещи, которые, по вашему мнению, исчезнут, когда приложение уйдет, как правило, остаются в памяти дольше, чем вы думали. В какой-то момент основной код перемещается в некоторую функцию, которая вызывается один раз. И тогда эта функция вызывается несколько раз. И тогда у вас есть утечка. Лучше кодировать в первую очередь, чем исправлять проблемы позже. Может, спустя годы.
Как и в случае с другим ответом, это зависит от операционной системы.
Сказав это, он обычно хорошо документировал, что будет очищено после завершения программы.
Обычно это включает в себя частную память приложения, файлы, сокеты, ручки ресурсов, ресурсы GUI и может исключать ресурсы, которые являются глобальными или общими для многих приложений. (например, разделяемая память POSIX сохраняется до перезагрузки, если вы не вызываете shm_unlink
).
Деструктор не вызван, потому что вы не удаляете указатель класса B. Также после выхода вашего приложения все выделенные ресурсы будут выпущены независимо от того, выпустили ли вы это или нет.