¿Cómo se accede a los elementos unique_ptr de un contenedor (a través de un iterador) sin quitarle la propiedad al contenedor? Cuando uno obtiene un iterador para un elemento en el contenedor, ¿la propiedad del elemento aún está en el contenedor? ¿Qué tal si uno descuenta el iterador para obtener acceso al unique_ptr? ¿Eso realiza un movimiento implícito de unique_ptr?Iteración sobre un contenedor de unique_ptr's
Me parece que estoy usando shared_ptr mucho cuando necesito almacenar elementos en un contenedor (no por valor), incluso si el contenedor posee los elementos conceptualmente y el otro código simplemente desea manipular elementos en el contenedor, porque Tengo miedo de no poder acceder realmente a los elementos uniqueptr en el contenedor sin que se le quite la propiedad.
¿Algún conocimiento?
Bien, creo que eso me aclara las cosas. He tenido la costumbre de usar la nueva función for_each con un lambda cuyo parámetro es el elemento pasado por valor, NO por referencia, pero supongo que tendré que hacer referencia a los elementos unique_ptr si quiero evitar un intento copiar/mover. PD si desreferencia el iterador una vez, y tomar una referencia a ese resultado, supongo que esto evita una copia intentada? Quiero decir como: 'for (Container :: iterator it = container.begin(); it! = Container.end(); it ++) { unique_ptr & element = &*it; // ¿No ha intentado copiar? } ' Gracias Howard, por cierto. –
Sí, creo que debería funcionar bien. Aunque tienes un 'y' extra en tu código. Pero el compilador te dirá dónde. –
Debería poder desreferenciarlo a a: blah & element = ** it; Todavía sin una copia, creo. (Probablemente más útil). –