weak_ptr 解答ページ | Programming Place Plus Modern C++編【標準ライブラリ】 第5章
Programming Place Plus トップページ – Modern C++編 – 第5章
問題① 参照カウンタの値を増減させないのであれば、std::weak_ptr ではなく、生のポインタを使ってはいけないのでしょうか? std::weak_ptr を使うことに、どのような利点がありますか?
確かに std::weak_ptr自体は参照カウンタに影響を与えませんが、std::weak_ptr を経由してリソースにアクセスする際には、std::shared_ptr を使用するのでした(本編参照)。こうすることで、実はもうリソースが解放されていて、存在しないことを検出できます。生のポインタでは、解放済みのリソースへアクセスしようとする時点で、未定義の動作になってしまうため、安全な運用ができません。
また、std::weak_ptr は、expiredメンバ関数を使って、共有管理されているリソースの生存をいつでも安全に「確認」できます。先ほどの説明と同じことですが、生のポインタでは安全に確認できません。
’2017/11/1 新規作成。
Programming Place Plus のトップページへ