Soy nuevo en C ++ y estoy tratando de entender cómo funciona este pedazo de código.

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

He hecho una clase de lista enlazada simple que tiene un vector de nodos.

lo que estoy tratando de entender es, si borro el nodo actual, ¿cómo sabe el bucle para cada bucle donde es el siguiente nodo?

Cómo pensé que funcionaría es, almacenaría un puntero al siguiente nodo y eliminaría el actual, y repetiría este proceso hasta que el siguiente nodo sea NULLPTR.

(Tal vez mi comprensión de los vectores no esté completa o no entiendo cómo funciona los bucles).

¿Puede alguien que entienda cómo funciona este código, por favor explique lo que está pasando aquí?

1
Saumi 1 jul. 2019 a las 13:38

1 respuesta

La mejor respuesta
for(auto& i : nodes) { delete &i; }

Es azúcar sintáctico para aproximadamente

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

Solo estás iterando sobre nodes. Suponiendo que el destructor de i no afecta nodes, entonces no hay problema con su código.

4
Vittorio Romeo 1 jul. 2019 a las 10:40