在此for-each循环中,delete-keyword如何工作?

时间:2019-07-01 10:38:03

标签: c++ foreach delete-keyword

我是C ++的新手,我正在尝试了解这段代码的工作原理。

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

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

我要了解的是,如果删除当前节点,那么每个循环的怎么知道下一个节点在哪里?

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

(也许我对向量的理解还不完整,或者我不了解for-each循环的工作原理。)

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

1 个答案:

答案 0 :(得分: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,那么您的代码就没有问题。