次のコードを検討します。
#include <memory>
#include <iostream>
using namespace std;
struct MySharedStruct
{
int i;
};
void print_value_of_i(weak_ptr<MySharedStruct> weakPtr)
{
if (shared_ptr<MySharedStruct> sp = weakPtr.lock())
{ cout << "Value of i = " << sp->i << endl; }
else
{ cout << "Resource has expired"; }
}
int main()
{
shared_ptr<MySharedStruct> sharedPtr(new MySharedStruct() );
sharedPtr->i = 5;
weak_ptr<MySharedStruct> weakPtr;
weakPtr = sharedPtr;
print_value_of_i(weakPtr);
sharedPtr.reset(new MySharedStruct() ); // <<----- How does weak_ptr know it has expired after this line executes?
sharedPtr->i = 10;
print_value_of_i(weakPtr);
return 0;
}
参照していたリソースが本質的に別のリソースに置き換えられたweak_ptr
ことを考慮して、期限切れになったことをどのようにして知ることができますか?古い共有リソースが破棄され、新しい共有リソースに置き換えられたことを確認するために、shared_ptr
何weak_ptr
を追跡しますか?そのような方法の定義例(該当する場合)をいただければ幸いです。lock
weak_ptr