重要なWeak Pointer関数
メニューを表示するにはスワイプしてください
expired() 関数
lock() を呼び出す前に、expired() メソッドを使用して、ウィークポインタがまだ有効かどうかを確認可能。この関数は、オブジェクトが破棄されていれば true を、そうでなければ false を返す。
expired_function.h
1234567891011// Call `expired()` before `lock()` if (!p_weak.expired()) { // Lock only if the object is still alive auto p_shared = p_weak.lock(); p_shared->update(); } else { std::cout << "Object no longer exists" << std::endl; }
ウィークポインタをロックする前に expired() を呼び出すことで、参照されているオブジェクトがまだ存在しているかどうかを判断できる。
use_count() 関数
weak ポインタはオブジェクトの参照カウントに影響を与えませんが、同じオブジェクトを管理している std::shared_ptr インスタンスの数を知ることは有用です。use_count() 関数はこの数値を返します。
use_count_function.h
12345std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr); // Should output one std::cout << p_weak.use_count() << std::endl;
reset() 関数
オブジェクトの監視を weak ポインタから解除するには、reset() 関数を使用します。これにより weak ポインタは空になり、どのオブジェクトも指さなくなります。
reset_function.h
1234std::weak_ptr<int> p_weak(sharedPtr); // After this, `p_weak` no longer observes the `p_shared` object p_weak.reset();
swap() 関数
swap() 関数は、2つの weak ポインタの内容を交換するために使用されます。これは、動的オブジェクトの所有権やライフタイムを変更せずに、2つの weak ポインタが監視するオブジェクトを切り替えたい場合に特に有用です。
swap_function.h
12345678std::shared_ptr<int> p_shared_A = std::make_shared<int>(10); std::shared_ptr<int> p_shared_B = std::make_shared<int>(20); std::weak_ptr<int> p_weak_A(p_shared_A); std::weak_ptr<int> p_weak_B(p_shared_B); // Swaps the objects `p_weak_A` and `p_weak_B` p_weak_A.swap(weakPtrB);
最初、p_weak_A は p_shared_A によって管理されているオブジェクトを監視し、p_weak_B は p_shared_B によって管理されているオブジェクトを監視します。
swap() を呼び出した後、p_weak_A は p_shared_B によって管理されているオブジェクトを監視し始め、p_weak_B は p_shared_A によって管理されているオブジェクトを監視します。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください