はじめに 数年前、C++11 の std::unique_ptr, std::shared_ptr を使い始めたころ、機能は理解できるんだけど実際のコードでどう使うのがよいのか ? がしっくりこずに試行錯誤していた覚えがある。 今となってはなかば無意識に使っているが、あのころの自分のように迷っている人向けに、自分の使い方を整理してみる。 という主旨なので、右辺値参照とかカスタムデリータとかのちょっとややこしい話は省きます。 整理してみる 登場人物 T* / const T*: 生ポインタ。 std::unique_ptr<T> std::shared_ptr<T> std::weak_ptr<T> (本稿ではあまり触れない) 関数の引数 関数を通して 所有権を渡したい ときは std::unique_ptr, std::shared_ptr を使う。 std::unique_ptr が完全
![C++ スマートポインタのパターン - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/e34fe2dc76d9289cd627bdd0b37515351930f860/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9QyUyQiUyQiUyMCVFMyU4MiVCOSVFMyU4MyU5RSVFMyU4MyVCQyVFMyU4MyU4OCVFMyU4MyU5RCVFMyU4MiVBNCVFMyU4MyVCMyVFMyU4MiVCRiVFMyU4MSVBRSVFMyU4MyU5MSVFMyU4MiVCRiVFMyU4MyVCQyVFMyU4MyVCMyZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9ZjI0NzA3NDM5Y2Q5YjAzMmYxMjQ1MDVhMWUyMTk1NDY%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBrb2ppb2h0YSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9MTQ2N2Q4MjkzZmUyMjg4YWY2MmZmMjFiNGNhZDIwZGQ%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D5de7cb6cef500369fe6a4ad8fc70e14e)