Chcę zapisać listę obiektów w obiekcie std::vector
, ale obiekty zawierają odwołanie i nie można do nich przypisać. Mogę jednak skopiować - skonstruować obiekt.C++ Użyj nieprzypisanych obiektów w wektorze
Jedyną opcją, o której mogę pomyśleć, to użycie wskaźników do zawijania obiektów i ponownego umieszczenia wskaźników, gdy trzeba je przypisać, ale składnia tego spowodowałaby znaczne zmniejszenie czytelności, szczególnie w przypadku korzystania z iteratorów, a ja wolałbym alternatywny.
nie działa:
std::vector<MyObject> myVector;
//fill the vector
//...
myVector[1] = object1;
inteligentne kursory ofiara czytelność:
std::vector<std::unique_ptr<MyObject>> ptrVector;
//fill the vector
//...
ptrVector[1] = std::unique_ptr<MyObject>(new MyObject(object1));
Czy są jakieś inne sposoby korzystania nieprzenoszalnym obiektów w std::vector
?
Zakładając C++ 11, by za pomocą 'std :: reference_wrapper' zamiast tradycyjnych odniesień być rozwiązanie? – jogojapan
Nie sądzę, że potrzebujesz 'std :: move' w ostatnim wierszu kodu, ponieważ' std :: unique_ptr (...) 'jest wartością r. –
@ DavidRodríguez-dribeas O tak, naprawiłem to w pytaniu. –