Динамически размещенный двумерный массив автоматически удаляется после выхода из программы? - PullRequest
0 голосов
/ 29 октября 2018

Я узнаю о деструкторах прямо сейчас, потому что я делаю это назначение для матриц (мы должны создать класс Matrix и операторы перегрузки для выполнения операций Matrix, и я, и человек, о котором я собираюсь упомянуть в следующем бите, были планирует также заставить его выполнить исключение Гаусса-Иордана, если это уместно), которые представлены в этом назначении через динамические двумерные массивы.

Я слышал, как кто-то говорил об использовании деструктора для процесса удаления массивов. Я начал читать о деструкторах и об одном из событий, которое вызывает деструкторы, которые казались единственным случаем, когда деструктор будет использоваться в приложении, как это было прекращением программы, поэтому я немного растерялся из-за того, почему он нужен деструктор? Каково значение деструктора в таком приложении?

1 Ответ

0 голосов
/ 29 октября 2018

Ответ на вопрос в заголовке:

Да. И нет.

нет

№:

Если процесс создает объект с new и завершает работу без вызова delete для того же объекта, объект никогда не уничтожается. Любое действие, которое будет выполнено деструктором, просто не выполняется .

Это может быть действие, которое требуется для согласованности внешних данных. Как что-то толкать в базу данных. Или как сброс кеша на диск. То, что действие пропущено, полностью зависит от деструктора.

Да

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

Когда процесс завершается, ядро ​​просто освобождает любую память, которая все еще выделена для процесса. Таким образом, вы не теряете навсегда память, забывая delete объекты при завершении работы.

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


Итак, суть: память все равно будет восстановлена ​​ядром. Но вообще не стоит забывать об очистке. Лучше не привыкать к лени, потому что эта привычка сильно укусит тебя в будущем.

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