Насколько я понимаю, в то время как shared_ptr выполняет подсчет ссылок, слабый_ptr - нет.Итак, насколько это безопасно, зависит от того, как вы его используете.Риск состоит в том, что вы возвращаете weak_ptr в _mStatus
, а затем объект-владелец (который имеет ссылку на shared_ptr) исчезает, в результате чего ref-count становится равным нулю, и, следовательно, память освобождается, но ваша слабая ссылка на негоТеперь обращаясь к свободной памяти, вызывающей хаос.Теперь, weak_ptr имеет защиту, что, если вы получите значение из него, и оно уже было бесплатным, оно даст вам вновь инициализированный указатель (то есть нулевой указатель).Но, если ваш вызывающий получает слабый_птр и получает от него значение указателя (возможно, копирование в примитивный тип указателя), а затем объект-владелец исчезает, тогда это необработанное значение указателя теперь является поддельным.