Wie Sie in der Implementierung sehen können, haben Sie in Ihrem Link angegeben ), wenn ein geteilter Zeiger Kopie oder Kopie kopiert ist, ist der Zeiger auf den Referenzzähler ( ref_count
) geteilt zwischen allen Instanzen, die denselben Zeiger verwalten:
Auf diese Weise verweisen alle Instanzen dieses gemeinsamen Zeigers auf den gleichen Speicherort , um den Referenzzähler zu verfolgen, und der letzte shared_ptr
kann wissen, ob er dies tun muss die Reinigung ( delete
den zugewiesenen Speicher):
Diese Antwort basiert auf dem vereinfachten Beispiel des OP. Eine shared_ptr
Implementierung ist weitaus komplizierter als die im Beispiel (denke an Atomizität, Rennbedingungen, etc ...).
Erstens, in anderen, um etwas zu teilen, müssen Sie es irgendwo hinstellen, wo andere Zugang haben können. Wie von @Igor Tandetnik bemerkt. Ein Objekt mit dynamischer Speicherdauer würde die Aufgabe also gut erfüllen. Ein Objekt einer statischen Speicherdauer mit dynamischer Initialisierung könnte es ebenfalls tun, aber das Objekt existiert für den Rest des Programms, was wir nicht wollen.
Zweitens ist shared_ptr
ein bisschen komplizierter als das. Ein typisches shared_ptr
würde sich auf einen Kontrollblock beziehen. Dieser Kontrollblock enthält normalerweise:
Für die Thread-Sicherheit wird die Anzahl der gemeinsamen Referenzen und die Anzahl der schwachen Referenzen typischerweise von einem atomaren Typ gehalten.
BEARBEITEN: Siehe @Passer By's Kommentar.
Tags und Links c++ shared-ptr