Verwendung von C ++ Unique_ptr

Verwendung von C ++ Unique_ptr
Die intelligenten Zeiger werden verwendet, um die Ressource dynamisch zuzuordnen. Viele Arten von intelligenten Zeigern werden in C ++ für verschiedene Zwecke verwendet, wie z auto_ptr, Unique_ptr, Und Shared_ptr. Der auto_ptr -Zeiger ist in der neuen Version von C veraltet++. Der Unique_PTR wird zum Austausch des auto_ptr verwendet. Das Objekt dieses Zeigers kann den Zeiger besitzen. Das Objekt dieses Zeigers besitzt den Zeiger einzigartig, und kein anderer Zeiger kann auf das Objekt verweisen. Das Unique_Ptr löscht die Objekte automatisch. Dieser Zeiger verwaltet diese Objekte, wenn die Objekte zerstört werden oder der Wert des Objekts geändert wird oder die Funktion reset () aufgerufen wird. Die Merkmale des Unique_Ptr und die Verwendungen dieses Zeigers werden in diesem Tutorial besprochen.

Hauptkomponenten:

Zwei Hauptkomponenten des einzigartigen_PTR -Objekts finden Sie unten:

A. Gespeicherter Zeiger:

Es wird verwendet, um die von einem einzigartigen Zeiger erstellten Objekte zu verwalten. Es wird zum Zeitpunkt der Zeigererstellung erstellt und kann auf unterschiedliche Weise verändert werden.

B. Gespeicherter Deleter:

Es dauert das Argument des gespeicherten Zeigertyps, mit dem das verwaltete Objekt gelöscht wird. Es wird auch zum Zeitpunkt der Zeigererstellung erstellt und kann auf unterschiedliche Weise verändert werden.

Beispiel 1: Erstellen Sie ein Zeigerobjekt einer Klasse mit Konstruktor

Die Möglichkeit, die einzigartigen Zeigerobjekte einer Klasse zu deklarieren und auf die Methode der Klasse zuzugreifen. Eine Klasse mit einem Konstruktor und einer öffentlichen Methode wurde im Code deklariert. Der Konstruktor hat drei Argumente. Der erste eindeutige Zeiger wurde erstellt, indem der Konstruktor mit drei Argumentwerten aufgerufen wird. Der Ergebnis() Die Methode wird vom Zeigerobjekt aufgerufen, das die Summe von drei Argumentwerten des Konstruktors berechnet. Als nächstes wird das zweite eindeutige Zeigerobjekt erstellt, ohne den Konstruktor aufzurufen, und der erste Zeiger wird auf den zweiten Zeiger verschoben. Der Ergebnis() Die Methode wird durch das zweite Zeigerobjekt aufgerufen.

// notwendige Bibliotheken einschließen
#enthalten
#enthalten
Verwenden von NameSpace STD;
// die Klasse definieren
Klasse Addition
int Nummer1, Nummer2, Nummer3;
öffentlich:
// den Konstruktor deklarieren
Addition (int a, int b, int c)

Nummer1 = a;
Nummer2 = b;
Nummer3 = C;

// Methode deklarieren, um die Summe zu berechnen
int result ()

Rückgabenummer1 + Nummer2 + Nummer3;

;
int main ()

// den ersten Zeiger deklarieren
Unique_ptr Pointer1 (Neuzugang (45, 55, 30));
Cout<<"The result of sum using the first pointer :"// den zweiten Zeiger deklarieren
Unique_ptr pointer2;
// Bewegen Sie den ersten Zeiger auf den zweiten Zeiger
pointer2 = move (pointer1);
Cout<<"The result of sum using the second pointer :"return0;

Ausgang:

Die folgende Ausgabe wird nach der Ausführung des obigen Codes angezeigt. Die Summe von 45, 55 und 30 ist 130, die für beide Zeiger gedruckt wurden.

Beispiel 2: Erstellen Sie ein Zeigerobjekt einer Klasse mit Konstruktor und Destruktor

Der Weg, um ein einzigartiges Zeigerobjekt einer Klasse mit Konstruktor und Destruktor zu deklarieren, wurde im folgenden Beispiel gezeigt. Die Klasse enthält einen Konstruktor mit einem Argument, eine öffentliche Methode mit dem Namen display () zum Wert der Klassenvariablen und einen Destruktor, der eine Zerstörungsnachricht druckt, bevor das Objekt der Klasse zerstört wird. Die Methode display () wird aufgerufen, nachdem das eindeutige Zeigerobjekt im Code erstellt wurde.

// notwendige Bibliotheken einschließen
#enthalten
#enthalten
Verwenden von NameSpace STD;
// die Klasse definieren
Klassenkunde

Zeichenfolge Name;
öffentlich:
// den Konstruktor deklarieren
Kunde (String n)

Name = n;
Cout<<"The resource is allocated.\n";

// Methode deklarieren, um den Kundennamen zu drucken
void Display ()

Cout<<"The name of the customer is: "<< name <<"\n";

// den Zerstörer deklarieren
~ Customer ()

Cout<<"The resource is destroyed.\n";

;
int main ()

// Zuordnen Sie das Ressourcenobjekt zu, das dem Unique_PTR gehört
Unique_ptrupointer New Customer ("Mir Abbas");
upointer-> display ();
return0;

Ausgang:

Nach der Ausführung des obigen Code wird die folgende Ausgabe angezeigt:

Beispiel 3: Überprüfen Sie den Zeiger nach der Übertragung des Eigentums

Die Möglichkeit, den Besitz des einzigartigen Zeigers zu überprüfen, hat im folgenden Beispiel gezeigt, indem zwei einzigartige Zeiger einer Klasse erstellt werden. Eine Klasse mit zwei Zeichenfolgenvariablen und einer öffentlichen Methode wurde im Code deklariert. Die Methode book_details () der Klasse wird nach dem Erstellen des ersten einzigartigen Zeigerobjekts der Klasse aufgerufen. Als nächstes wurde das zweite einzigartige Zeigerobjekt erstellt, und der erste Zeiger wurde auf den zweiten Zeiger verschoben, der den ersten Zeiger zerstört. Der Besitz beider Hinweise sollte später überprüft werden.

// notwendige Bibliotheken einschließen
#enthalten
#enthalten
Verwenden von NameSpace STD;
// die Klasse definieren
Klassenbuch
String title = "Die C ++ - Programmiersprache";
String Author = "Bjarne stroustrup";
öffentlich:
// Methode deklarieren, um Buchdetails zu drucken
voidbook_details ()

Cout<<"Book Name: "<< title <<"\n";
Cout<<"Author Name: "<< author <<"\n";

;
int main ()

// den ersten Zeiger deklarieren
Unique_ptr pointer1 (neues Buch ());
pointer1-> book_details ();
// den zweiten Zeiger deklarieren
Unique_ptr pointer2;
// Bewegen Sie den ersten Zeiger auf den zweiten Zeiger
pointer2 = move (pointer1);
// Überprüfen Sie den ersten Zeiger
if (static_cast (pointer1)) cout<<"The first poiner is not null\n";
Elsecout<<"The first poiner is null\n";
// Überprüfen Sie den zweiten Zeiger
if (static_cast (pointer2)) cout<<"The second poiner is not null\n";
Elsecout<<"The second poiner is null\n";
return0;

Ausgang:

Die folgende Ausgabe wird nach der Ausführung des obigen Codes angezeigt. Nach der Ausgabe wurde der Besitz des ersten Zeigers entfernt und die Nachricht “Der erste Zeiger ist nullHat für den ersten Zeiger gedruckt. Der Besitz des zweiten Zeigers existiert und die Botschaft “Der erste Zeiger ist nicht null”Hat für den zweiten Zeiger gedruckt:

Abschluss:

Die Zwecke der Verwendung eines einzigartigen Zeigers in C ++ - Programmierung wurden in diesem Tutorial unter Verwendung mehrerer Beispiele beschrieben. Die Möglichkeiten, einen einzigartigen Zeiger zu erstellen, das Eigentum des Zeigers zu übertragen und das aktuelle Eigentum des Zeigers zu überprüfen.