Come si fa accesso unique_ptr elementi di un contenitore (tramite un iteratore) senza prendere possesso di distanza dal contenitore? Quando si ottiene un iteratore su un elemento nel contenitore, la proprietà dell'elemento è ancora presente nel contenitore? Che ne dici di quando si deruba l'iteratore per accedere a unique_ptr? Questo compie una mossa implicita di unique_ptr?l'iterazione di un contenitore di di unique_ptr
trovo sto usando shared_ptr molto quando ho bisogno di memorizzare gli elementi in un contenitore (non per valore), anche se il contenitore possiede concettualmente gli elementi e altro codice vuole semplicemente per manipolare gli elementi nel contenitore, perché io Ho paura di non essere in grado di accedere effettivamente agli elementi unique_ptr nel contenitore senza che ne sia stata presa la proprietà.
Eventuali approfondimenti?
Okay, penso che chiarisca le cose per me. Ho avuto l'abitudine di usare la nuova funzione for_each con un lambda il cui parametro è l'elemento passato per valore, NON per riferimento, ma suppongo che dovrò fare riferimento ad elementi unique_ptr se voglio evitare un tentativo copia/sposta. Post scriptum se cancello una volta l'iteratore e prendo un riferimento a quel risultato, presumo che questo eviti una copia tentata? Voglio dire: 'per (Contenitore :: iteratore it = container.begin(); it! = Container.end(); it ++) { unique_ptr & element = &*it; // Nessun tentativo di copia? } Grazie Howard, btw. –
Sì, penso che dovrebbe funzionare bene. Sebbene tu abbia un extra '&' nel tuo codice. Ma il compilatore ti dirà dove. –
Dovresti essere in grado di dereferenziarlo a: blah & element = ** it; ancora senza una copia, penso. (Probabilmente più utile.) –