Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ Weakポインタの紹介 | スマートポインタの導入
C++スマートポインタ

bookWeakポインタの紹介

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

スマートポインタ std::weak_ptr は、指し示すオブジェクトの所有権を持たないポインタ。つまり、weakポインタはオブジェクトの参照カウントを増やさない。

std::weak_ptr は、sharedポインタによって管理されているオブジェクトへのアクセスを、その寿命を延長せずに可能にする。すべてのsharedポインタがスコープ外になると、weakポインタが存在していてもオブジェクトは削除される。これは、共有オブジェクトの解放を妨げずに監視する場合に有用。

main.cpp

main.cpp

copy
12345678910111213141516171819
#include <iostream> #include <memory> struct Resource { Resource() { std::cout << "Resource created\n"; } ~Resource() { std::cout << "Resource destroyed\n"; } }; int main() { std::shared_ptr<Resource> sp1 = std::make_shared<Resource>(); std::weak_ptr<Resource> wp = sp1; // Weak pointer does not increase ref count std::cout << "Shared pointer going out of scope...\n"; sp1.reset(); // Resource is deleted if (wp.expired()) std::cout << "Resource no longer exists\n"; }

weakポインタのライフサイクル

weakポインタはオブザーバーであり、オブジェクトにアクセスできるが寿命を延長しない

そのライフサイクルはsharedポインタに依存する。最後のsharedポインタが破棄されると、オブジェクトは解放され、weakポインタは期限切れとなる。weakポインタ自体は残るが、になる。

question mark

リソースが10個のshared_ptrによって所有され、1つのshared_ptrによって監視されている場合、すべてのweak_ptrインスタンスがスコープ外になるとデストラクタは呼び出されますか?

正しい答えを選んでください

すべて明確でしたか?

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

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

セクション 1.  10

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 1.  10
some-alt