Как работает ключевое слово delete в этом цикле for-each? - PullRequest
1 голос
/ 01 июля 2019

Я новичок в C ++ и пытаюсь понять, как работает этот фрагмент кода.

~List() {
    for(auto& i : nodes) {
        delete &i;
    }
}

Я создал класс Simple Linked List, в котором есть вектор узлов.

Я пытаюсь понять, что если я удаляю текущий узел, как для каждого цикла узнает, где находится следующий узел?

Как я думал, это будет работать, я буду хранить указатель на следующий узел и удалять текущий, и повторять этот процесс, пока следующий узел не будет nullptr.

(Возможно, мое понимание векторовне завершена, или я не понимаю, как работают циклы for-each.)

Может кто-то, кто понимает, как работает этот код, объясните, пожалуйста, что здесь происходит?

1 Ответ

4 голосов
/ 01 июля 2019
for(auto& i : nodes) { delete &i; }

является синтаксическим сахаром для примерно

auto&& range = nodes;
for(auto it = std::begin(range); it != std::end(range); ++it)
{
    auto& i = *it:
    delete &i;
}

Вы просто повторяете nodes.Если предположить, что деструктор i не влияет на nodes, то с вашим кодом проблем нет.

...