C ++ stdmake_unique

C ++ stdmake_unique
In diesem Artikel werden wir eine Funktion „make_unique“ diskutieren, die von der Speicherbibliothek bereitgestellt wird. Eine Speicherbibliothek wird verwendet, um Dienstprogramme für die Verwaltung der Speicherzuweisung und verschiedene Aufgaben im Speicherhaufen zu definieren. Bevor wir zu unserem Thema wechseln, sollten wir wissen, was einzigartige Zeiger sind, weil die Verwendung der Make_unique -Funktion auch die einzigartigen Zeiger enthält. Ein einzigartiger Zeiger ist ein intelligenter Zeiger, der einen Zeiger besitzt, ihn aber nicht mit einem anderen Zeiger teilen kann. Die Funktion make_unique ist die effizientere Möglichkeit, den Unique_Pointer zu initialisieren, und gibt einen eindeutigen Zeiger auf jedes Objekt zurück, das einen angegebenen Typ hat. Es wurde in C ++ 14 eingeführt. Wenn Sie die Funktion make_unique verwenden, um einen einzigartigen_pointer des Array -Typs zu erstellen, müssen wir die Elemente des Arrays getrennt deklarieren.

Syntax:
Das Folgende ist die Syntax des Make_unique -Zeigers:

Vorlage Unique_ptr make_unique (args);

In der Syntax über „Klasse t“ ist der Typ, auf den der eindeutige Zeiger hingewiesen wird, und „Args“ bezeichnet das Argument, das an den Konstruktor eines beliebigen Objekts übergeben werden soll. Ein weiterer Parameter, der manchmal an diese Funktion übergeben wird. Der Typ des Objekts für die Funktion make_unique wird in Winkelklammern übergeben, wobei die Werte, an die die Objektzeigerpunkte in Klammern übergeben werden.

Beispiel # 01:

Lassen Sie uns ein Beispiel ausführen, in dem wir ein Objekt erstellen, das die Nachricht für den Benutzer in der Bestätigung erstellt, ob die make_unique erfolgreich ein UNQIUE_PTR erstellt wird oder nicht. Jetzt, einschließlich der Header -Dateien, ist der erste der Speicher und der zweite der Isotream. Speicher wird zur Bereitstellung der Dienstprogramme zur Verwaltung der dynamischen Speicherzuweisung verwendet. Der iOstream wird verwendet, um verschiedene Eingangs-Output-Vorgänge durchzuführen. Nachdem wir unsere Header -Dateien eingefügt haben, werden wir eine Klasse namens "Mkunique" erstellen. In dieser Klasse erstellen wir eine Funktion namens "show ()" ". Rufen Sie mit dem Zeiger make_unique die Meldungsanzeige auf dem Objekt auf.

Die Methode show () wird unter Verwendung des einzigartigen Zeigers aufgerufen, den wir in unserer Hauptfunktion deklariert haben. Gehen Sie nun mit der Hauptfunktion fort, bei der wir einen einzigartigen Zeiger „P“ und "Mkunique" -Klasse initialisierten, dem wir eine Make_unique -Mitgliedsfunktion des Typs "Mkunique" zugewiesen haben. Danach mit diesem Zeiger „P“ werden wir mit dem "->" -Operator die show () -Methode aufrufen.

#enthalten
#enthalten
Klasse Mkunique

öffentlich:
void show ()

std :: Cout

Lassen Sie uns unsere Ausgabe überprüfen, in der die Nachricht erfolgreich angezeigt wird. Dies bedeutet.

Beispiel # 02:

Jetzt werden wir ein weiteres Beispiel ausführen, in dem wir ein Array mit einem intelligenten Zeiger erstellen und die darin übergebenen Werte erhalten. Nachdem wir unsere Header -Dateien wie im obigen Beispiel eingeschlossen haben, werden wir in unsere Hauptfunktion eintauchen. Wir haben einen automatischen Zeiger „Mk_unique“ deklariert, ein Auto ist ein Datentyp, mit dem eine Variable der Zeigertyp deklariert wird. Der MK_Unique haben wir die Funktion "make_unique" des Typ -Arrays zugewiesen, wobei "8" die Größe des Arrays hat. Dies bedeutet, dass die Variable mk_unique jetzt ein einzigartiger Zeiger ist, der das Array der Größe von weniger als „8“ bearbeitet.

Als nächstes werden wir die Werte in unserem Array mit der Variablen „K“ speichern, die die Werte in unserem Array speichern. Die für die Schleife startet mit „0“ und endet zum Wert „7“. Es beginnt von 0 bis weniger als 8 bis zum letzten Index erfüllt. Es wird den inneren Code mit dem Inkrement von 1 ausführen. In der für Schleife haben wir dem Zeiger „K“ zugewiesen, der die Werte im Speicherhaufen speichert. Und dann haben wir diese Werte mit dem Make_unique -Zeiger "mk_unique" angezeigt.

#enthalten
#enthalten
int main ()

auto mk_unique = std :: make_unique(8);
für (int k = 0; k < 8; ++k)

mk_unique [k] = k;
std :: Cout << mk_unique[k] << std::endl;

Wie im folgenden Snippet gezeigt, druckten die Werte, die wir an das Zeiger -Array übergeben haben. Wenn die Schleife zum ersten Mal beginnt, wird die Bedingung überprüft, ob k weniger als „8“ ist oder nicht. Dann führt es den Wert aus, der im Index 0 gespeichert ist, der 1 ist. Danach erhöht es es um 1 und so weiter, bis die Bedingung falsch ist.

Beispiel # 03:

Jetzt werden wir eine einfache Möglichkeit versuchen, einen einzigartigen Zeiger mit der Make_unique -Mitgliedsfunktion zu erstellen. Dann drucken wir den Wert mit dem Zeiger, den wir erstellen werden. Lassen Sie uns zunächst Header -Dateien einschließen und dann zu unserer Hauptfunktion gehen, in der wir einen einzigartigen Zeiger mit dem Namen „P“ der Typ Ganzzahl deklariert haben. Dies bedeutet. Diesem Zeiger haben wir einen MAKE_Unique -Zeiger des ganzzahligen Typs zugewiesen, an den wir den Wert „123“ als Argument übergeben haben, das im Speicherhaufen gespeichert wird. Am Ende haben wir den Wert angezeigt, der im Speicher unter Verwendung von „*P“ gespeichert ist, was bedeutet.

#enthalten
#enthalten

std :: Unique_ptr p = std :: make_unique(123);
std :: Cout << *p;

Wie in der Abbildung unterhalb der Ausgabe des oben ausgeführten Codes gezeigt, wird angezeigt. Wir haben den Wert des eindeutigen Zeigers „P“ angezeigt, der „123“ war, ohne Fehler zu haben.

Abschluss

In diesem Handbuch haben wir die Methoden erläutert, wie die Make_unique -Mitgliedsfunktion zum Erstellen eines Unique_Pointers verwendet wird. Make_unique ist der effektiver. Make_unique ist der sicherste Weg, um einen temporären Speicherort im Speicherhaufen zu erstellen.