Учитывая следующий код:
#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
, будут оценены.