У меня есть 2 вопроса, связанные с одной и той же проблемой:
-
Как вернуть ссылку на вектор, принадлежащий классу?
У меня есть этот класс:
class sys{ protected: vector<int> s; public: sys(); vector<int>& getS() {return s;} //(1) };(1) должен вернуть ссылку вектора
s. Однако вmain():main(){ sys* my_sys = new sys(); vector<int> &t1 = my_sys->getS(); //(2) vector<int> t2 = my_sys->getS(); //(3) ... }-
t1является ссылкой наs(т.е. при измененииt1my_sys.s). -
t2- COPYs(т.е. при измененииt2my_sys.s не изменяется).
Почему работает строка (3)?
-
-
Я не хочу, чтобы было возможно изменить
my_sys.sвне класса, но я хочу вернуть ссылку из-за эффективности. Где я могу поставитьconst?Я попытался изменить строку (1) на
const vector<int>& getS() {return s;} //(4)но я не уверен, что этого достаточно.