общего класса. Пусть будет экземпляр класса банк и все клиенты время от времени хотят его использовать. Банк один на всех. Что нужно передавать внутрь класса, что будет время от времени использовать банк? Просто указатель на экземпляр банка ? Или вообще ничего не передавать, а использовать банк в глобальной области видимости (как например, все используют же std::cout , мы же не передаем на него указатель в какой либо класс, его использующий, а просто берем и используем его, так как он есть итак и виден отовсюду).
Я бы ссылку передавал, при условии, что мы гарантируем, что банк живет где-то дольше, чем его клиенты
Ссылку на Банк. Сегодня банк один, а завтра десять. И не указатель - зачем? Клиент может работать с банком если банк nullptr? Ссылку.
weak_ptr на случай, если банк обанкротят или взорвут, у тебя будет легальный способ проверить это
Расскажи поподробней об этом. То есть я сначала создам банк, потом указатель на банк и этот указатель положу в weak_prt ? Если банк разушится когда нибудь, то сработает его деструктор, а как об этом узнает мой указатель на него?
class Person { std::vector<std::weak_ptr<Bank>> m_banks; ... public: void registerBank(std::shared_ptr<Bank> bank) {m_banks.emplace_back(std::move(bank));} }; ... std::shared_ptr<Bank> bank = std::make_shared<Bank>("МММ"); Person person; person.registerBank(bank);
У weak_ptr, вроде, нет же конструктора от рвалуе шареда?
Понял. А разве можно в вектор, что хранит тип под названием weak_ptr , класть тип shared_ptr ?
Weak имеет конструктор от шаред, мы его вызываем в emplace_back
Есть от const shared_ptr<Y>&
Я про rvalue в качестве параметра, а не обычный
Либо Анатолий изменил сообщение, либо я не понимаю, к чему это
Андрей, не суть, на автомате написал move, а так по const shared_ptr & будет выхван
Да, я убрал move, чтобы не смущать
Обсуждают сегодня