Warum werden in der Implementierung von std :: shared_ptr zwei rohe Zeiger auf das verwaltete Objekt benötigt?

Hier ist ein Zitat aus dem Implementierungshinweis von cppreference vonstd::shared_ptr, wobei erwähnt wird, dass es zwei verschiedene Zeiger gibt (wie in Fettdruck dargestellt): derjenige, der von @ zurückgegeben werden kaget() und derjenige, der die tatsächlichen Daten innerhalb des Steuerblocks enthält.

In einer typischen Implementierung,std::shared_ptr enthält nur zwei Zeiger:

der gespeicherte Zeiger (einer von @ zurückgegebget()) ein Zeiger auf Steuerblock

Der Steuerblock ist ein dynamisch zugewiesenes Objekt, das Folgendes enthält:

eder ein Zeiger auf das verwaltete Objekt noch auf das verwaltete Objekt selbthe deleter (vom Typ gelöscht) der Allokator (vom Typ gelöscht)die Anzahl vonshared_ptrs das besitzt das verwaltete Objektdie Anzahl vonweak_ptrs die sich auf das verwaltete Objekt beziehen

Der Zeiger desshared_ptr wird direkt von @ zurückgegebget(), während der Zeiger oder das Objekt, das vom Steuerblock gehalten wird, gelöscht wird, wenn die Anzahl der gemeinsam genutzten Eigentümer Null erreicht. Diese Zeiger sind nicht unbedingt gleich.

Meine Frage ist, warum für das verwaltete Objekt zwei verschiedene Zeiger (die beiden in Fettdruck) benötigt werden (zusätzlich zum Zeiger auf den Steuerblock)? Wird der von @ nicht zurückgegebeget() ausreichen? Und warum sind diese Zeiger nicht unbedingt gleich?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage