if(!weak.expired()) weak.lock()->work(); // <--- баг
if(!weak.expired()){ auto shared = weak.lock(); if(shared) shared ->work(); // <--- ok}
if(!weak.expired()) // <--- быстрая проверка{ auto shared = weak.lock(); // <--- медленный лок if(shared) // <--- окончательная проверка shared ->work(); // <--- можно работать}
C++ (Qt)if( (auto p = unique_ptr.get()) ){ p->do(); p->bar();}
auto*& example::get_weak(){ return &owner; // std::unique_ptr<some>}
C++ (Qt)if( (auto p = unique_ptr.get()) ){ p->do(); p->bar();} xrenEgoZnaet(); // Проверяем повторноif( (auto p = unique_ptr.get()) ){ p->foo(); p->bla();}
if(weak) weak->work(); // то, что это не безопасно, их не смущает.