質問: GetComponent(); ``` の時点でエラーが出て止まってほしいんです。
回答: こんにちは。 `if (component_tmp.expired())`は`if ( ! component_tmp.expired())`の間違いのような気がしますが、もし間違いでないなら戻り値はshared_ptr(nullptr)のweak_ptrですから意味がないので、戻り値をboolにしてもよいように感じます。 `if ( ! component_tmp.expired())`の間違いでしたら、戻り値をlockすると「T型へダイナミックキャストした先を保持するshared_ptr<」が返ってくる筈なので意味があると思います。 この場合、「見つからなかった」時は「監視対象のない」weak_ptrをreturnする方法が使えるかもしれません。(ごめんなさい。未定義動作のリスクが結構高いです。でも、監視対象の有無判定の需要は有る筈なのでちょっと期待しています。) cpprefjp - C++日本語リファレンスをたどって、std::shared_ptr::owner_beforeの解説を見ると以下のように書かれています。 > > 技術的には、shared_ptrが内部でメモリ確保している、参照カウンタオブジェクトのポインタ比較を行う。 > > > この解説に頼り、かつ監視対象がない時にそのポインタがnullptrであれば次のような関数にて、監視対象の有無を判定できる筈です。 ``` template bool isEmpty(std::weak_ptr const& w) { std::weak_ptr z; return !z.owner_before(w) && !w.owner_before(z); } ```