Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ Weakポインタの作成と使用 | スマートポインタの導入
C++スマートポインタ
セクション 1.  11
single

single

bookWeakポインタの作成と使用

メニューを表示するにはスワイプしてください

弱参照ポインタの作成

通常、std::weak_ptr は既存の std::shared_ptr から作成します。これにより、弱参照ポインタが少なくとも1つの共有ポインタによって管理されているオブジェクトを監視することが保証されます。

creating_weak_pointer.h

creating_weak_pointer.h

copy
12
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);

std::weak_ptr 型の p_weak は、既存の std::shared_ptr 型の p_shared から構築されます。これは、p_weakp_shared の参照カウントを増やすことなく、同じ管理対象オブジェクトを監視することを意味します。p_weak の有効性は p_shared に依存しており、オブジェクトを管理しているすべての std::shared_ptr インスタンスが破棄されると、p_weak は期限切れとなり、直接オブジェクトへアクセスできなくなります。

弱ポインタの使用方法

std::weak_ptr で管理されているオブジェクトにアクセスするには、まず std::shared_ptr を使って lock() に変換する必要があります。このメソッドは、オブジェクトがまだ存在しているかどうかを確認し、存在していればそのオブジェクトへの std::shared_ptr を返し、存在しない場合は空の std::shared_ptr を返します。

弱ポインタをロックすることで、使用中にオブジェクトが破棄されるのを防ぎます。std::weak_ptr は参照カウントに影響を与えないため、直接オブジェクトにアクセスすると、既に破棄されたインスタンスを使用するリスクがあります。std::shared_ptr に変換することで参照カウントが増加し、使用中はオブジェクトが有効であることが保証されます。

converting.h

converting.h

copy
12345
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
タスク

スワイプしてコーディングを開始

std::weak_ptr から std::shared_ptr を作成し、再び std::shared_ptr に変換して、管理対象オブジェクトの値に安全にアクセスするコードを完成させてください。

解答

Switch to desktop実践的な練習のためにデスクトップに切り替える下記のオプションのいずれかを利用して、現在の場所から続行する
すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  11
single

single

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

some-alt