Объект, на который указывает shared_ptr
, существует только до тех пор, пока существует хотя бы один общий указатель, который все еще указывает на него.
В вашем примере, скорее всего, толькоодин такой указатель, и он возвращается foo
.
Для v0
, p
становится shared_ptr
, сохраняющим объект живым.
Для v1
есть только временный общий указатель, который существует только на время инициализации v1
.Указатель и объект, на который указывает указатель, исчезают к тому времени, когда вы используете ссылку, что делает его висящим в точке использования.