Кажется, что weak_ptr
как-то просто знает, когда shared_ptr
ссылки были уничтожены. Как так? Существует ли постоянная связь или что-то еще?
Возьмите следующий код, например:
weak_ptr<int> test() {
shared_ptr<int> foo{new int};
return foo;
}
int main() {
auto foo = test();
cout << foo.expired() << endl;
}
Я бы ожидал segfault, когда weak_ptr<int>
отправляется проверять состояние shared_ptr<int>
, но его нет. weak_ptr<int>
правильно идентифицирует память как освобожденную. Как это известно?