Создание B::obj
ссылки одинаково, независимо от ее типа.Ссылка - это ссылка, это ссылка, не имеет значения, является ли она ссылкой на int
или std::shared_ptr<A>
.
И обратите внимание, что, поскольку вы передаете аргумент конструктора B
по значению,когда конструктор вернется, он выйдет из области видимости, и любая ссылка на r
будет недействительной.
Наконец, на самом деле нет смысла сохранять ссылку на std::shared_ptr
.Иногда имеет смысл передать std::shared_ptr
ссылочный аргумент, но на самом деле не хранить такую ссылку.Ссылка на объект std::shared_ptr
, а не на то, на что указывает std::shared_ptr
, использование ссылки не увеличит внутренний счетчик и не будет использовать семантику совместного владения std::shared_ptr
.
Inдругими словами: не сохраняйте ссылки на std::shared_ptr
.