C ++ Shared_ptr

C ++ Shared_ptr
Der Shared_ptr ist eine Art von intelligenten Zeigern von C ++, die das gemeinsame Eigentum des vom Zeiger erstellten Objekts enthält. Es teilt das Eigentum des Objekts, wenn der Zeiger in ein anderes Objekt gespeichert wird, und der gemeinsame Referenzschalter zählt die Anzahl der Eigentümer. Der Shared_ptr Erhöht den Referenzzähler nach dem Kopieren des Objekts um einen und verringert den Referenzzähler um einen, nachdem das Objekt zerstört wurde. Das Gedächtnis, das dem Objekt gehört Shared_ptr wird zerstört oder die zurücksetzen() Die Funktion wird aufgerufen, um einen weiteren Zeiger für das Objekt zuzuweisen. Wenn das Shared_ptr Besitzt kein Objekt, dann wird es als leerer gemeinsamer Zeiger bezeichnet. Verschiedene Verwendungen der Shared_ptr wurden in diesem Tutorial gezeigt.

Beispiel 1: Deklarieren Sie den gemeinsamen Zeiger auf unterschiedliche Weise

Im folgenden Beispiel werden drei verschiedene Möglichkeiten zum Deklarieren eines gemeinsamen Zeigers angezeigt. Eine Klasse mit einem Konstruktor und einer öffentlichen Methode wurde im Code deklariert. Der Konstruktor druckt eine Nachricht, wenn mit dem Konstruktor ein neues freigegebenes Objekt erstellt wird. Der Anzeige() Die Methode druckt Nachrichten basierend auf dem aufgerufenen Shared Zeiger -Objekt. Hier wurde das erste gemeinsam genutzte Zeigerobjekt erstellt, ohne den Konstruktor aufzurufen. Das zweite gemeinsame Zeigerobjekt wurde erstellt, indem der Konstruktor aufgerufen wird. Der dritte gemeinsame Zeiger hat erstellt, indem der erste gemeinsam genutzte Zeiger zugewiesen wird. Der Anzeige() Die Methode wurde dreimal unter Verwendung von drei gemeinsam genutzten Zeigerobjekten aufgerufen.

// notwendige Bibliotheken einschließen
#enthalten
#enthalten
usingnameSpacestd;
// die Klasse definieren
ClassMyClass
öffentlich:
// den Konstruktor deklarieren
Meine Klasse()
Cout<<"The constructor is called.\n";

// eine Methode zum Drucken von Text deklarieren
voidDisplay (String str)

Cout<<"The Display() method is called from the "<< str <<" pointer.\n";

;
intmain ()

// Initialisieren Sie Shared_ptr, ohne Konstruktor aufzurufen
Shared_ptr p1 = make_shared ();
p1-> display ("First");
// Initialisieren Sie Shared_ptr, indem Sie den Konstruktor aufrufen
shared_ptr p2 = shared_ptr (newmyClass);
p2-> display ("zweite");
// Initialisieren Sie Shared_ptr nach Zuweisung
Shared_ptr p3 = p1;
p3-> display ("dritte");
return0;

Ausgang:

Die folgende Ausgabe wird nach der Ausführung des obigen Codes angezeigt. Der Konstruktor hat nur zum Zeitpunkt der Erstellung des zweiten Objekts aufgerufen. Die Nachricht des Konstruktors wurde also nur einmal gedruckt:

Beispiel 2: Drucken Sie den gespeicherten gemeinsamen Zeigerort aus

Der geteilte Zeiger von Get () Funktion wird verwendet, um den gespeicherten, freigegebenen Zeigerort zurückzugeben. Das folgende Beispiel druckt den Ort der gespeicherten, gemeinsam genutzten Zeiger, die von der Klasse und der Funktion erstellt wurden. Hier wurde eine Klasse mit einem Konstruktor definiert, um zum Erstellen eines gemeinsamen Zeigers verwendet zu werden. Eine Funktion wurde erklärt, um einen gemeinsam genutzten Zeiger zu erstellen und den Shared Zeiger -Ort mit der Funktion von Get () auszudrucken. In diesem Code wurde der erste gemeinsam genutzte Zeiger mithilfe der Klasse erstellt, der zweite freigegebene Zeiger wurde mit der Funktion erstellt, und der dritte gemeinsame Zeiger wurde erstellt, indem der erste Zeiger zugewiesen wurde.

// notwendige Bibliotheken einschließen
#enthalten
#enthalten
usingnameSpacestd;
// die Klasse definieren
Klassenmyklasse

öffentlich:
// den Konstruktor deklarieren
Meine Klasse()
Cout<<"The constructor is called.\n";

;
// Funktion zum Initialisieren des Zeigers definieren
voidinit_shared_ptr ()

Shared_ptr P2 (NewmyClass);
Cout<
intmain ()

// Initialisieren Sie Shared_ptr, indem Sie den Konstruktor aufrufen
shared_ptr p1 = shared_ptr (newmyClass);
Cout<// Initialisieren Sie Shared_ptr, indem Sie die Funktion aufrufen
Init_shared_ptr ();
// Initialisieren Sie Shared_ptr nach Zuweisung
Shared_ptr p3 = p1;
Cout<return0;

Ausgang:

Nach der Ausführung des obigen Code wird die folgende ähnliche Ausgabe angezeigt. In der Ausgabe ist der zurückgegebene Wert der Get () -Funktion für die erste und dritte gemeinsame Zeiger gleich. Der zweite gemeinsame Zeiger ist jedoch anders:

Beispiel 3: Zählen Sie die gemeinsam genutzten Zeigerobjekte

Das folgende Beispiel zeigt eine Möglichkeit, die Anzahl der Objekte zu zählen, die durch einen gemeinsamen Zeiger nach dem Erstellen und Zerstören des Zeigers gezählt werden. Eine Klasse mit einem Konstruktor wurde im Code deklariert. Der erste gemeinsame Zeiger wurde mit der Klasse erstellt, und der zweite gemeinsame Zeiger wurde mit dem ersten gemeinsamen Zeiger erstellt. Die Anzahl der Objekte, die beide gemeinsam genutzten Zeiger vor und nach dem Aufrufen der Funktion reset () verweist, wurde später gedruckt.

// notwendige Bibliotheken einschließen
#enthalten
#enthalten
usingnameSpacestd;
// die Klasse definieren
ClassMyClass
öffentlich:
// den Konstruktor deklarieren
Meine Klasse()
Cout<<"The constructor is called.\n";

;
intmain ()

// Initialisieren Sie den First Shared_Ptr, indem Sie den Konstruktor aufrufen
Shared_ptr P1 (NewmyClass);
// Zeigen Sie die Anzahl der shared_ptr -Objekte vom ersten Zeiger an
Cout<<"p1 pointing to "<< p1.use_count() <<" object(s).\n";
// initialisieren
Shared_ptr p2 (p1);
// Zeigen Sie die Anzahl der Shared_Ptr -Objekte nach dem ersten und zweiten Zeiger an
Cout<<"p2 pointing to "<< p2.use_count() <<" object(s).\n";
Cout<<"p1 pointing to "<< p1.use_count() <<" object(s).\n";
// Entfernen Sie den Besitz des ersten Zeigers aus dem SHARED_PTR -Objekt
P1.zurücksetzen();
// Zeigen Sie die Anzahl der Shared_Ptr -Objekte vom zweiten Zeiger an
Cout<<"p2 pointing to "<< p2.use_count() <<" object(s).\n";
return0;

Ausgang:

Die folgende Ausgabe wird nach der Ausführung des obigen Codes angezeigt. Der erste Zeiger, P1, zeigt nach der Schöpfung auf ein Objekt. Nach dem Erstellen des zweiten Zeigers, p2, Verwenden Sie den ersten Zeiger, P1, Beide Zeiger zeigen auf zwei Objekte, um den Zeiger zu teilen. Nach dem Aufrufen der Funktion reset () für den Zeiger, P1, Ein Objekt wurde zerstört und der Zeiger, p2, zeigt jetzt nur auf ein Objekt.

Abschluss:

Die Zwecke der Verwendung eines gemeinsam genutzten Zeigers in C ++ wurden in diesem Tutorial unter Verwendung einfacher Beispiele erläutert. Erstellen gemeinsamer Zeiger auf unterschiedliche Weise, erhalten Sie den gespeicherten gemeinsamen Zeigerstandort und zählen Sie die Anzahl der Objekte, die von den gemeinsamen Zeigern gezeigt werden. Ich hoffe.