Pregunta

Sé que esto suena estúpido, pero mira este simple ejemplo (trabajar en dirección debería tener más de un elemento):

#define BOOST_FILESYSTEM_VERSION 3
#include <boost/filesystem.hpp>
#include <cassert>

int main()
{
    using namespace boost::filesystem;
    directory_iterator it("./");
    directory_iterator it_copy = it;
    ++it;
    assert(it_copy != it);
    return 0;
}

it_copy se modifica junto con it! (Boost 1.45) ¿Qué consideraciones podrían conducir a tal diseño (directory_iterator ¿Es algo así como Smart PTR)?

Solo necesito guardar una copia de directory_iterator para usarlo más tarde.

¿Fue útil?

Solución

Si echas un vistazo al referencia Notarás que se anuncia para ser un boost::single_pass_traversal_tag.

Este es el equivalente (en terminología de impulso) de la Iterador de entrada En el STL (piense en ello como un iterador que entrega paquetes desde una conexión de red, no puede rebobinar).

Observe también (de esta misma página):

i == j no implica que ++i == ++j.

En este punto, uno puede preguntarse por qué se puede copiar. La razón es que los algoritmos STL han establecido la norma tomando sus argumentos por copia. Por lo tanto, no sería utilizable con los algoritmos STL si no pudiera copiarse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top