Вы можете реализовать is_shared
, используя weak_from_this()
в C ++ 17, например:
bool is_shared() const
{
return !weak_from_this().expired();
}
Это исключение бесплатно и будет возвращаться только true
, если объект фактически управляется shared_ptr
.
До C ++ 17 нет способа проверить, так как это неопределенное поведение - вызывать shared_from_this()
, когда объект не принадлежит shared_ptr
.Только когда в C ++ 17 был введен weak_from_this()
, мы не смогли получить доступ к закрытому weak_ptr
члену std::enable_shared_from_this
(через копию), чтобы мы могли проверить состояние определенным образом.