名前空間
変種
操作

std::weak_ptr::weak_ptr

提供: cppreference.com
< cpp‎ | memory‎ | weak ptr
 
 
 
動的メモリ管理
未初期化記憶域
(C++17)
ガベージコレクションサポート
その他
(C++20)
(C++11)
(C++11)
C のライブラリ
低水準のメモリ管理
 
 
constexpr weak_ptr() noexcept;
(1) (C++11およびそれ以降)
weak_ptr( const weak_ptr& r ) noexcept;
(2) (C++11およびそれ以降)
template< class Y >
weak_ptr( const weak_ptr<Y>& r ) noexcept;
(2) (C++11およびそれ以降)
template< class Y >
weak_ptr( const std::shared_ptr<Y>& r ) noexcept;
(2) (C++11およびそれ以降)
weak_ptr( weak_ptr&& r ) noexcept;
(3) (C++14およびそれ以降)
template< class Y >
weak_ptr( weak_ptr<Y>&& r ) noexcept;
(3) (C++14およびそれ以降)

r とオブジェクトを共有するかもしれない、新しい weak_ptr を構築します。

1) デフォルトコンストラクタ。 空の weak_ptr を構築します。
2) r によって管理されているオブジェクトを共有する新しい weak_ptr を構築します。 r がオブジェクトを管理していなければ、 *this もオブジェクトを管理しません。 テンプレート版のオーバーロードは、 Y*T* に暗黙に変換可能である、または何らかの型 U および何らかの数値 N について YUN 個の配列型であり、 TU (またはその cv 修飾された型) のサイズ不明な配列型である (C++17およびそれ以降)場合でなければ、オーバーロード解決に参加しません。
3) ムーブコンストラクタ。 weak_ptr のインスタンスを r から *this にムーブします。 この後、 r は空になり、 r.use_count()==0 になります。 テンプレート版のオーバーロードは、 Y*T* に暗黙に変換可能でなければ、オーバーロード解決に参加しません。

目次

[編集] 引数

r - この std::weak_ptr によって表示される std::shared_ptr または std::weak_ptr

[編集] ノート

デフォルトコンストラクタが constexpr であるため、 static な weak_ptr は、いかなる動的非ローカル初期化が始まるよりも前に、静的非ローカル初期化の一部として初期化されます。 このため、 static オブジェクトのコンストラクタで weak_ptr を使用しても安全です。

[編集]

#include <memory>
#include <iostream>
 
struct Foo {};
 
int main()
{
   std::weak_ptr<Foo> w_ptr;
 
   {
      auto ptr = std::make_shared<Foo>();
      w_ptr = ptr;
      std::cout << "w_ptr.use_count() inside scope: " << w_ptr.use_count() << '\n';
   }
 
   std::cout << "w_ptr.use_count() out of scope: " << w_ptr.use_count() << '\n';
   std::cout << "w_ptr.expired() out of scope: " << std::boolalpha << w_ptr.expired() << '\n';
}

出力:

w_ptr.use_count() inside scope: 1
w_ptr.use_count() out of scope: 0
w_ptr.expired() out of scope: true

[編集] 関連項目

weak_ptr を代入します
(パブリックメンバ関数) [edit]