Безопасно ли удалять forward_list в C++?

У меня есть личный проект, над которым я работаю, и в этом личном проекте я использовал один раз forward_list хранить некоторую информацию о некоторых файлах. Потом я пошел играть в игру и вдруг подумал: это мой f_list разрушенный сейф? В моем проекте я просто использовал delete указатель на список.

std::forward_list<fileInfo> *lst;
lst = new std::forward_list<fileInfo>;
*lst = getDirectoryFiles(cfg->logDirectory);
lst->sort();
// do something
delete lst;

Я провел отдельный тест (for (uint i = 0; i < 1000000; ++i) lst>push_front(i);) и delete работает как положено (в диспетчере задач память с этим списком составляет около 77 МБ, а после удаления - около 400 КБ).

Но я все еще волнуюсь, если это безопасно во всех компиляторах и операционных системах (я попробовал это в MSVC2013).

Должен ли я позвонить первым clear() для списка, то delete на указатель?

1 ответ

Решение

Представьте, что кто-то ходит с сотовым телефоном в коробке. Внутри коробки была камера, а снаружи - дисплей, на котором отображалось то, что было на телефоне в коробке. У него были причудливые прикосновения Уолдо, которые касались того, чего вы касались на коробке, но не на телефоне.

Это даже повредит телефон, если коробка была повреждена!

Экран телефона не отображается больше.

Они приходят к вам и спрашивают, могут ли они отправить коробку (с телефоном в ней) на утилизацию электроники.

Ответ "конечно, это безопасно", но реальный вопрос в том, почему они построили коробку в первую очередь?

Поле в этой аналогии является указателем, вызов new создает коробку. Призыв к delete перерабатывает его (с телефоном внутри).

Телефон является списком пересылки.

Другие вопросы по тегам