「C++の基礎 - スマートポインタ(weak ptr)」の版間の差分

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

Wiki がページ「スマートポインタの使い方(weak ptr)」を「C++の基礎 - スマートポインタ(weak ptr)」に、リダイレクトを残さずに移動しました
文字列「<source lang」を「<syntaxhighlight lang」に置換
17行目: 17行目:
<br>
<br>
循環参照の例で見てみる。<br>
循環参照の例で見てみる。<br>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // 参照するメモリにアクセスするのに、operator*()やoperator->()は使用できない
  // 参照するメモリにアクセスするのに、operator*()やoperator->()は使用できない
  // メモリにアクセスするためには、まず、lock()によって参照先を保持するshared_ptr<T>を取得し、そこからアクセスする
  // メモリにアクセスするためには、まず、lock()によって参照先を保持するshared_ptr<T>を取得し、そこからアクセスする