Es scheint, dass eine weak_ptr
irgendwie weiß nur, wenn die shared_ptr
es Referenzen wurde zerstört wurde. Wie ist das? Wird eine konstante Verbindung aufrechterhalten oder etwas?Was passiert mit einem weak_ptr, wenn sein shared_ptr zerstört wird?
Nehmen Sie die following code for example:
weak_ptr<int> test() {
shared_ptr<int> foo{new int};
return foo;
}
int main() {
auto foo = test();
cout << foo.expired() << endl;
}
Ich würde eine segfault erwarten, wenn die weak_ptr<int>
auf dem Stand der shared_ptr<int>
zu überprüfen geht, aber es ist nicht ein. Die weak_ptr<int>
identifiziert den Speicher korrekt als freigegeben. Woher weiß es das?
‚std :: weak_ptr‘ enthält einen Verweis auf einen gemeinsam genutzten Referenz zählen auf die gleiche Weise 'std :: shared_ptr' tut. Der einzige Unterschied ist, dass 'std :: weak_ptr' diese Anzahl nicht erhöht/verringert. –
* Ich hätte einen segfault erwartet ... * Warum? das ist speziell der Punkt von weak_ptr – UmNyobe
@UmNyobe Guter Punkt! Ich habe versucht zu kommunizieren, dass ich nicht verstanden habe, wie es funktioniert hat. –