У меня есть вектор std::vector<MyClass> myclass_vec(10)
с 10 инициализированными объектами MyClass
. Теперь я хотел бы перебрать этот вектор и сохранить ссылку на каждый объект MyClass
в другом векторе std::vector<MyClass> myclass_vec_refs
. Причина, по которой я хотел бы хранить ссылки, заключается в том, что мне не нужно копировать объекты и, очевидно, ссылаться на тот же объект, что и на myclass_vec
.Как хранить ссылки на объекты из одного вектора в другом векторе в C++?
По какой-то причине это не работает как аспектированное. Должен ли я объявлять std::vector<&MyClass> myclass_vec_refs
так?
Поскольку я просматривал другие вопросы, заданные здесь, я читал около std::unique_ptr
. Если я изменю std::vector<std::unique_ptr<MyClass>> myclass_vec(10)
, то я бы не смог получить ссылку или указатель в myclass_vec_refs
, так как они объявлены уникальными. Поправьте меня, если я ошибаюсь.
Другой подход заключался в использовании std::shared_ptr
. Поскольку он содержит контрольный счетчик, я мог бы указать myclass_vec_refs
на объекты в myclass_vec
, но я читал, что это вводит довольно некоторые накладные расходы, а share_ptr следует использовать только в качестве последнего средства.
Я также не знаю, ссылаются ли ссылки, как я пытаюсь. Что произойдет, если объект в myclass_vec
удален? Является ли вектор myclass_vec_refs
измененным размером на -1, поскольку объект больше не существует или он просто указывает на плохую память?
Возможно ли emplace_back
ссылку в каталоге myclass_vec_refs
? Поскольку это создает объект на месте, я предполагаю, что это не работает, и можно использовать только push_back
?
Почему не просто хранить итератор в другой вектор? – NathanOliver
Почему не хранить указатели вместо выделенного объекта? –
Почему бы вам не хранить индексы? –