https://t.me/supapro/881580
Всегда можно вывернуться: #include <vector> #include <iostream> struct X {int& x;}; void print(std::vector<X> xs) { for (auto x : xs) std::cout << x.x << " "; } int main() { int a = 1, b = 2, c = 3; std::vector<X> xs{{{a},{b},{c}}}; print(xs); a = 4; b = 5, c = 6; print(xs); }
ты только что придумал std::reference_wrapper
Просто так понятнее
Можно хранить указатель
оборачивать каждый раз что-то в структуру это такое себе решение... (мне лень)
возьми std::reference_wrapper
понял, почитаю
по ссылке выше он упоминается
читал что-то про прицин RAII в ООП, это наверное оно
Но лучше всё же std::vector<X*> или std::vector<std::shared_ptr<X>>, первое будет говорить: "Очень очень аккуратно, а то ногу отстрелишь"
Тем, что X* явно говорит об необходимости контроля времени жизни руками.
а зачем его контролировать руками?
#include <vector> #include <iostream> struct X {int& x;}; std::vector<X> bad() { int a = 1, b = 2, c = 3; std::vector<X> xs{{{a},{b},{c}}}; return xs; } void print(std::vector<X> xs) { for (auto x : xs) std::cout << x.x << " "; } int main() { auto xs = bad(); print(xs); }
Обсуждают сегодня