W jaki sposób można uzyskać dostęp do elementów unique_ptr kontenera (przez iterator) bez odrywania własności od kontenera? Kiedy dostaje się iterator do elementu w kontenerze, czy własność elementu nadal znajduje się w kontenerze? Co powiesz na pytanie, kiedy dereferencje z iteratora są usuwane, aby uzyskać dostęp do unique_ptr? Czy to wykonuje niejawny ruch unique_ptr?Powtórzenie kontenera unique_ptr's
Uważam, że używam shared_ptr, gdy potrzebuję przechowywać elementy w kontenerze (nie według wartości), nawet jeśli kontener pojęciowo posiada elementy, a inny kod po prostu chce manipulować elementami w kontenerze, ponieważ "boję się, że nie będę mógł uzyskać dostępu do elementów unique_ptr w kontenerze, bez odebrania z niego prawa własności.
Jakieś spostrzeżenia?
Okej, myślę, że to wyjaśnia dla mnie. Miałem zwyczaj używania nowej funkcji for_each z lambdą, której parametrem jest element przekazywany przez wartość, a nie przez odniesienie, ale myślę, że będę musiał utworzyć odniesienie dla elementów unique_ptr, jeśli chcę uniknąć próby kopiuj/przenieś. P.S. jeśli raz zrezygnuję z iteratora i odniesiemy się do tego wyniku, zakładam, że to pomija próbę skopiowania? Mam na myśli: 'for (Container :: iterator it = container.begin(); it! = Container.end(); it ++) { unique_ptr & element = &*it; // Nie próbowano skopiować? } ' Dzięki Howard, przy okazji. –
Tak, myślę, że to powinno działać dobrze. Chociaż masz dodatkowe '&' w swoim kodzie. Ale kompilator powie ci, gdzie. –
Powinieneś być w stanie dereferencji do: blah & element = ** it; wciąż bez kopii, myślę. (Prawdopodobnie bardziej przydatne.) –