Po wielu badaniach z valgrind doszedłem do wniosku, że std :: vector tworzy kopię obiektu, który chcesz push_back.
Czy to prawda? Wektor nie może zachować odniesienia lub wskaźnika do obiektu bez kopii?!
Dzięki
push_back
: zajmuje const&
. Albo odrzuca wartość (bezużyteczna), albo istnieje metoda pobierania. Patrzymy więc na podpis back
i zwraca on zwykły &
, więc albo oryginalna wartość została skopiowana, albo const
została po cichu odrzucona (bardzo źle: potencjalnie niezdefiniowane zachowanie). Zakładając więc, że projektanci vector
byli racjonalni ( vector<bool>
nie sprzeciwiali się), dochodzimy do wniosku, że robi kopie.
*
lub,&
aby utworzyć wskaźnik lub odniesienie.