Что не так с shared_ptr p (новый Y);?
В этом нет ничего плохого, только проблема в том, что у вас может не быть этого внутри члена класса Y
, и иногда вы хотите, чтобы член возвращал std::shared_ptr
самому себе. std::shared_ptr<Y>( this )
явно неправильный способ его создания.
Интересно, может ли такой пример прояснить ситуацию и все равно будет достаточно просто:
std::shared_ptr<Y> Y::getObject()
{
return some_condition ? shared_from_this() : std::make_shared<Y>( somedata );
}