1

我是 C++ 新手,我试图了解这段代码是如何工作的。

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

我制作了一个具有节点向量的简单链表类。

我想了解的是,如果我删除当前节点,for each 循环如何知道下一个节点在哪里?

我认为它的工作原理是,我将存储一个指向下一个节点的指针并删除当前节点,然后重复此过程,直到下一个节点为 nullptr。

(也许我对向量的理解不完整,或者我不明白 for-each 循环是如何工作的。)

了解此代码如何工作的人可以解释一下这里发生了什么吗?

4

1 回答 1

4
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,那么您的代码就没有问题。

于 2019-07-01T10:40:25.730 回答