Безопасно ли удалять 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
перерабатывает его (с телефоном внутри).
Телефон является списком пересылки.