Как указали Алан и Игорь, std::weak_ptr<>
, реализующий магию shared_from_this()
, устанавливается соответствующим образом всякий раз, когда std::shared_ptr<>
создается для хранения объекта, публично полученного из std::enable_shared_from_this
.Итак, да, ваш код будет работать.
Однако метод-член
std::shared_ptr<A> A::getA()
{
return shared_from_this();
}
будет вызывать UB (до C ++ 17), если объект не управляется std::shared_ptr<>
,К сожалению, до C ++ 17 не было никакого способа сказать изнутри объекта (типа A
), управляется ли он с помощью общего указателя, и вы не можете легко предотвратить этот UB.
Поскольку вы фактически используете std::unique_ptr<>
для управления своими объектами, я рекомендую поэтому не наследовать от std::enable_shared_from_this
.