Страницы

Поиск по вопросам

вторник, 18 февраля 2020 г.

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

#cpp #memory_leaks #memory_management


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


Ответы

Ответ 1



Если Ваше приложение будет "прихлопнуто" или аварийно завершено, то обычная выделенная память будет подчищена. Да, деструктор не будет вызван, но какое это имеет значение, если приложение уже упало. Поэтому, если просто выделили память себе под массив, а потом подчистили - все ок. Но в современном с++ явный вызов new/delete считается моветоном. Обычные unique_ptr/shared_ptr решают 90% подобных проблем и нивелируют необходимость в теле деструктора. Другое дело, если приложение выделят какие-то общие ресурсы - shared memory или междупроцессорные мютексы/семафоры. Тут могут быть проблемы.

Комментариев нет:

Отправить комментарий