Verwendung von C++ unique_ptr

Use C Unique_ptr



Die intelligenten Zeiger werden verwendet, um die Ressource dynamisch zuzuweisen. In C++ werden viele Arten von intelligenten Zeigern für verschiedene Zwecke verwendet, z auto_ptr , unique_ptr , und shared_ptr . Der Zeiger auto_ptr ist in der neuen Version von C++ veraltet. Der unique_ptr wird als Ersatz für den auto_ptr verwendet. Das Objekt dieses Zeigers kann den Zeiger übernehmen. Das Objekt dieses Zeigers besitzt den Zeiger eindeutig, und kein anderer Zeiger kann auf das Objekt zeigen. Der unique_ptr löscht die Objekte automatisch. Dieser Zeiger verwaltet diese Objekte, wenn die Objekte zerstört werden, der Wert des Objekts geändert wird oder die Funktion reset() aufgerufen wird. Die Funktionen von unique_ptr und die Verwendung dieses Zeigers werden in diesem Tutorial beschrieben.

Hauptkomponenten:







Im Folgenden werden zwei Hauptkomponenten des unique_ptr-Objekts bereitgestellt:



A. Gespeicherter Zeiger:



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





B. Gespeicherter Löscher:

Es nimmt das Argument des gespeicherten Zeigertyps an, der verwendet wird, um das verwaltete Objekt zu löschen. Es wird auch zum Zeitpunkt der Zeigererstellung erstellt und kann auf verschiedene Weise geändert werden.



Beispiel 1: Erstellen Sie ein Zeigerobjekt einer Klasse mit dem Konstruktor

Um die eindeutigen Zeigerobjekte einer Klasse zu deklarieren und auf die Methode der Klasse zuzugreifen, verwenden Sie die Objekte, wie im folgenden Beispiel gezeigt. Im Code wurde eine Klasse mit einem Konstruktor und einer öffentlichen Methode deklariert. Der Konstruktor hat drei Argumente. Der erste eindeutige Zeiger wurde durch Aufrufen des Konstruktors mit drei Argumentwerten erstellt. Die Ergebnis() -Methode wird vom Zeigerobjekt aufgerufen, das die Summe der drei Argumentwerte des Konstruktors berechnet. Als nächstes wird das zweite eindeutige Zeigerobjekt erstellt, ohne den Konstruktor aufzurufen, und der erste Zeiger wird zum zweiten Zeiger verschoben. Die Ergebnis() Methode wird vom zweiten Zeigerobjekt aufgerufen.

//Erforderliche Bibliotheken einbeziehen

#enthalten

#enthalten

usingnamespace std;

//Definiere die Klasse
Klasse Zusatz{

int Zahl1, Zahl2, Zahl3;
öffentlich:
//Deklarieren Sie den Konstruktor
Zusatz(int a, int b, int c)
{
Zahl1 = a;
Zahl2 = b;
Zahl3 = c;
}
//Methode zur Berechnung des deklarierenSumme
int Ergebnis()
{
RückkehrZahl1 + Zahl2 + Zahl3;
}
};
int main()
{
//Deklarieren Sie den ersten Zeiger
unique_ptr pointer1(neuer Zusatz(Vier fünf,55,30));

Kosten<<'Das Ergebnis der Summe mit dem ersten Zeiger :'<Ergebnis() <<' ';
//Deklarieren Sie den zweiten Zeiger
unique_ptr-Zeiger2;
//Bewegen Sie den ersten Zeiger auf den zweiten Zeiger
Zeiger2 = bewegen(Zeiger1);

Kosten<<'Das Ergebnis der Summe mit dem zweiten Zeiger :'<Ergebnis() <<' ';
zurück0;
}

Ausgabe:

Die folgende Ausgabe wird angezeigt, nachdem der obige Code ausgeführt wurde. Die Summe von 45, 55 und 30 ist 130, die für beide Zeiger ausgegeben wurde.

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

Im folgenden Beispiel wurde gezeigt, wie ein eindeutiges Zeigerobjekt einer Klasse mit Konstruktor und Destruktor deklariert wird. Die Klasse enthält einen Konstruktor mit einem Argument, eine öffentliche Methode namens Display() für den Wert der Klassenvariablen und einen Destruktor, der eine Zerstörungsnachricht ausgibt, bevor das Objekt der Klasse zerstört wird. Die Methode Display() wird aufgerufen, nachdem das eindeutige Zeigerobjekt im Code erstellt wurde.

//Erforderliche Bibliotheken einbeziehen

#enthalten

#enthalten

usingnamespace std;

//Definiere die Klasse
Klasse Kunde
{
Zeichenfolgenname;

öffentlich:
//Deklarieren Sie den Konstruktor
Kunde(Zeichenfolge n)
{
Name = n;
Kosten<<'Die Ressource ist zugewiesen. ';
}

//Methode zum Drucken des Kundennamens deklarieren
ungültige Anzeige()
{
Kosten<<'Der Name des Kunden ist: '<<Name<<' ';
}

//Deklariere den Destruktor
~Kunde()
{
Kosten<<„Die Ressource ist zerstört. ';
}
};
int main()
{
//Weisen Sie das Resource-Objekt zu, das dem unique_ptr gehört
unique_ptruPointer{Neukunde(„Mir Abbas“) };
uZeiger->Anzeige();
zurück0;
}

Ausgabe:

Die folgende Ausgabe wird erscheinen, nachdem der obige Code ausgeführt wurde:

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

Die Möglichkeit, den Besitz des eindeutigen Zeigers zu überprüfen, wurde im folgenden Beispiel gezeigt, indem zwei eindeutige Zeiger einer Klasse erstellt werden. Im Code wurde eine Klasse mit zwei Stringvariablen und einer öffentlichen Methode deklariert. Die Methode Book_details() der Klasse wird aufgerufen, nachdem das erste eindeutige Zeigerobjekt der Klasse erstellt wurde. Als nächstes wurde das zweite eindeutige Zeigerobjekt erzeugt und der erste Zeiger wurde zum zweiten Zeiger verschoben, der den ersten Zeiger zerstört. Der Besitz beider Zeiger sollte später überprüft werden.

//Erforderliche Bibliotheken einbeziehen

#enthalten

#enthalten

usingnamespace std;

//Definiere die Klasse
Klassenbuch{

Stringtitel ='Die Programmiersprache C++';
Zeichenfolge Autor ='Bjarne Stroustrup';

öffentlich:
//Methode zum Drucken von Buchdetails deklarieren
voidBook_details()
{
Kosten<<'Buchname: '<<Titel<<' ';
Kosten<<'Autorenname: '<<Autor<<' ';
}
};
int main()
{
//Deklarieren Sie den ersten Zeiger
unique_ptr pointer1(neues Buch());

Zeiger1->Buchdetails();
//Deklarieren Sie den zweiten Zeiger
unique_ptr-Zeiger2;
//Bewegen Sie den ersten Zeiger auf den zweiten Zeiger
Zeiger2 = bewegen(Zeiger1);

//Überprüfen Sie den ersten Zeiger
wenn (static_cast(Zeiger1))Kosten<<'Der erste Zeiger ist nicht null ';
Sonst<<'Der erste Zeiger ist null ';
//Überprüfen Sie den zweiten Zeiger
wenn (static_cast(Zeiger2))Kosten<<'Der zweite Zeiger ist nicht null ';
Sonst<<'Der zweite Zeiger ist null ';

zurück0;
}

Ausgabe:

Die folgende Ausgabe wird angezeigt, nachdem der obige Code ausgeführt wurde. Gemäß der Ausgabe wurde der Besitz des ersten Zeigers entfernt und die Nachricht, Der erste Zeiger ist null für den ersten Zeiger gedruckt hat. Der Besitz des zweiten Zeigers existiert, und die Nachricht, Der erste Zeiger ist nicht null hat für den zweiten Zeiger gedruckt:

Abschluss:

Der Zweck der Verwendung eines eindeutigen Zeigers in der C++-Programmierung wurde in diesem Tutorial anhand mehrerer Beispiele beschrieben. Die Möglichkeiten, einen eindeutigen Zeiger zu erstellen, den Besitz des Zeigers zu übertragen und den aktuellen Besitz des Zeigers zu überprüfen, wurden hier erklärt, um den Lesern zu helfen, die Verwendung des eindeutigen Zeigers richtig zu kennen.