Выделение памяти в С++ и аварийное завершение программы

247
01 июня 2017, 10:00

Допустим, у меня есть класс, который я создаю в самом начале программы, в его конструкторе я выделяю память под какие-то другие объекты с помощью операторов new, а в его деструкторе вызываю delete. Насколько такая практика приемлема и что произойдёт, если во время работы программы её аварийно завершить (скажем, прихлопнуть через диспетчер задач). Спасибо.

Answer 1

Если Ваше приложение будет "прихлопнуто" или аварийно завершено, то обычная выделенная память будет подчищена. Да, деструктор не будет вызван, но какое это имеет значение, если приложение уже упало. Поэтому, если просто выделили память себе под массив, а потом подчистили - все ок.

Но в современном с++ явный вызов new/delete считается моветоном. Обычные unique_ptr/shared_ptr решают 90% подобных проблем и нивелируют необходимость в теле деструктора.

Другое дело, если приложение выделят какие-то общие ресурсы - shared memory или междупроцессорные мютексы/семафоры. Тут могут быть проблемы.

READ ALSO
Как читать файл по 128 бит?

Как читать файл по 128 бит?

Так смог получить только первые 128 битКак при каждом цикле получать следующие 128 бит? Как определить конец файла?

359
Code style в Travis CI

Code style в Travis CI

Как в travisyml написать чтобы выполнялся code style только у измененных файлов? Язык C++

325
Объясните суть атомарных операций

Объясните суть атомарных операций

Вопрос по поводу атомарных операций

280
Задача С++ на цикл! [требует правки]

Задача С++ на цикл! [требует правки]

Найти значение функции, используя ее расписание в ряд Тейлора ln x

185