📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
細 Wiki がページ「スマートポインタの使い方(weak ptr)」を「C++の基礎 - スマートポインタ(weak ptr)」に、リダイレクトを残さずに移動しました |
細 文字列「<source lang」を「<syntaxhighlight lang」に置換 |
||
| 17行目: | 17行目: | ||
<br> | <br> | ||
循環参照の例で見てみる。<br> | 循環参照の例で見てみる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include<memory> | #include<memory> | ||
| 48行目: | 48行目: | ||
具体的な使い方を見てみる。<br> | 具体的な使い方を見てみる。<br> | ||
weak_ptr<T>は shared_ptr<T>が所有権を持つメモリしか管理できない。<br> | weak_ptr<T>は shared_ptr<T>が所有権を持つメモリしか管理できない。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// コンストラクタや代入演算子でshared_ptrを受け取る | // コンストラクタや代入演算子でshared_ptrを受け取る | ||
std::shared_ptr<T> sptr = std::make_shared<int>(10); | std::shared_ptr<T> sptr = std::make_shared<int>(10); | ||
| 59行目: | 59行目: | ||
</source> | </source> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="c++"> | ||
// weak_ptr<T>は、コピー、ムーブともに使用することができる。 | // weak_ptr<T>は、コピー、ムーブともに使用することができる。 | ||
std::shared_ptr<int> sptr = std::make_shared<int>(10); | std::shared_ptr<int> sptr = std::make_shared<int>(10); | ||
| 76行目: | 76行目: | ||
</source> | </source> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 参照の開放は、デストラクタやreset関数を使う | // 参照の開放は、デストラクタやreset関数を使う | ||
std::shared_ptr<int> sptr = std::make_shared<int>(10); | std::shared_ptr<int> sptr = std::make_shared<int>(10); | ||
| 89行目: | 89行目: | ||
</source> | </source> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 所有権はそもそも保持していないので、operator bool()は使用できない | // 所有権はそもそも保持していないので、operator bool()は使用できない | ||
std::shared_ptr<int> sptr = std::make_shared<int>(10); | std::shared_ptr<int> sptr = std::make_shared<int>(10); | ||
| 104行目: | 104行目: | ||
</source> | </source> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 参照するメモリにアクセスするのに、operator*()やoperator->()は使用できない | // 参照するメモリにアクセスするのに、operator*()やoperator->()は使用できない | ||
// メモリにアクセスするためには、まず、lock()によって参照先を保持するshared_ptr<T>を取得し、そこからアクセスする | // メモリにアクセスするためには、まず、lock()によって参照先を保持するshared_ptr<T>を取得し、そこからアクセスする | ||