Zum Beispiel gibt es eine Funktion, die ein Objekt findet und shared_ptr zurückgibt, wenn ein Objekt gefunden wird, und irgendwie angeben muss, dass kein Objekt gefunden wurde.
%Vor%Ist es korrekt, shared_ptr implizit mit nullptr wie im oberen Beispiel zu initialisieren? Es wird funktionieren, aber kann es so gemacht werden? Oder sollte ich stattdessen shared_ptr default constructed zurückgeben?
Was wäre, wenn es schwach_ptr wäre? Wie kann man überprüfen, dass leerer weak_ptr zurückgegeben wurde? durch weak_ptr :: expired function oder gibt es andere Möglichkeiten? Wenn die Überprüfung durch weak_ptr :: expired der einzige Weg ist, wie kann ich dann die Funktion unterscheiden, die den leeren Zeiger zurückgegeben hat, oder ob das Objekt gerade gelöscht wurde (Multi-Thread-Umgebung)?
Ist es korrekt, shared_ptr wie im oberen Beispiel implizit mit nullptr zu initialisieren?
Ja, es ist richtig, shared_ptr
mit nullptr
zu initialisieren. Es ist auch richtig, nullptr
zu shared_ptr
zuzuweisen.
Oder soll ich stattdessen shared_ptr default constructed zurückgeben?
Sie können dies auf beide Arten tun: Rückgabe von shared_ptr
initialisiert mit nullptr
und Rückgabe von shared_ptr
default constructed. Beide Wege sind richtig und beide haben den gleichen Effekt. Sie können verwenden, was Sie wollen.
Was wäre, wenn es schwach_ptr wäre? Wie kann man überprüfen, dass leerer weak_ptr zurückgegeben wurde? durch weak_ptr :: expired function oder gibt es andere Möglichkeiten?
weak_ptr
wird nullptr
(läuft ab), wenn der letzte shared_ptr
, der mit dem Objekt verknüpft ist, zerstört wird.
Der richtige Weg, mit weak_ptr
zu arbeiten, besteht darin, es mit lock Methode und dann mit created shared_ptr
zu arbeiten. In diesem Fall wird Ihre shared_ptr
nicht ablaufen, bis Sie diese neue weak_ptr
haben. Wenn Sie shared_ptr
nicht in weak_ptr
konvertieren, kann Ihr shared_ptr
jederzeit ablaufen.
Und ja, bevor Sie mit der neu erstellten weak_ptr
arbeiten, müssen Sie sicherstellen, dass sie nicht null ist, weil shared_ptr
möglicherweise abgelaufen ist, bevor Sie weak_ptr
mit shared_ptr
method erstellt haben.
Tags und Links c++ smart-pointers shared-ptr weak-ptr