std::weak_ptr<T>::weak_ptr - cppreference.com
提供: cppreference.com
<tbody> </tbody>
|
|
(1) | (C++11以上) |
|
|
(2) | (C++11以上) |
|
|
(2) | (C++11以上) |
|
|
(2) | (C++11以上) |
|
|
(3) | (C++14以上) |
|
|
(3) | (C++14以上) |
r とオブジェクトを共有するかもしれない、新しい weak_ptr を構築します。
1) デフォルトコンストラクタ。 空の weak_ptr を構築します。
2) r によって管理されているオブジェクトを共有する新しい weak_ptr を構築します。 r がオブジェクトを管理していなければ、 *this もオブジェクトを管理しません。 テンプレート版のオーバーロードは、 Y* が T* に暗黙に変換可能である、または何らかの型 U および何らかの数値 N について Y が U の N 個の配列型であり、 T が U (またはその 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