Предположим, у нас есть некоторый класс, скажем, class Apple
, и мы хотим сохранить std::vector
, содержащий Apple
.
Должен ли вектор содержать указатели, ссылки или простые объекты?
std::vector<Apple*> vector; // Definitely won't copy the Apple on lookup,
// but I would prefer not to use pointers if I don't have to
std::vector<Apple&> vector; // Seems circuitous?
std::vector<Apple> vector; // I don't know if this copies the Apple on each lookup
Моя цель - сделать так, чтобы при вызове
Apple& a = vector[4];
Apple
не было скопировано.
Я использую C ++ уже более года иЯ всегда работал над этим и никогда не понимал этого.Есть ли простое объяснение того, почему один из этих трех подходов является лучшим?