Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Was Sind Einzigartige Pointers? | Einzigartige Zeiger
C++ Smart Pointers
course content

Kursinhalt

C++ Smart Pointers

C++ Smart Pointers

1. Einführung in Smart Pointer
2. Einzigartige Zeiger
3. Gemeinsame Zeiger
4. Schwache Zeiger
5. Referenzen
6. Fortgeschrittene Themen

book
Was Sind Einzigartige Pointers?

Einzigartige Zeiger sind wohl die einfachsten der Smart-Pointer in C++. Wie der Name schon sagt, erlaubt ein einzigartiger Zeiger, definiert als std::unique_ptr, dass die zugewiesene Ressource (das referenzierte Objekt) nur einen Besitzer hat.

Das bedeutet, dass einzigartige Zeiger keine Referenzzählung durchführen müssen, die die Anzahl der Zeiger verfolgt, die das Eigentum an einer Ressource teilen.

Die Durchsetzung dieser Eins-zu-Eins-Beziehung führt zu einem geringeren Speicheraufwand und steigert die Gesamtleistung von C++-Anwendungen.

Kopieren nicht erlaubt

Ein einzigartiger Zeiger enthält einen rohen Zeiger auf die zugewiesene Ressource/das Objekt. Es ist nicht möglich, einen einzigartigen Zeiger zu kopieren oder ihn als Wert an eine Funktion zu übergeben.

Verschieben eines einzigartigen Zeigers

Es ist jedoch möglich, das Eigentum an dem Objekt, auf das ein std::unique_ptr zeigt, mit der Funktion std::move zu übertragen.

Wenn Sie std::move verwenden, wird im Wesentlichen der Besitz des Objekts von uniquePtr1 auf uniquePtr2 "verschoben". Das bedeutet, dass nach dieser Codezeile uniquePtr1 das Objekt nicht mehr besitzt und uniquePtr2 der neue Besitzer sein wird.

Weitere Dinge zu wissen

Wenn ein einzigartiger Zeiger den Gültigkeitsbereich verlässt (z. B. eine Funktion beendet wird) oder explizit zurückgesetzt wird, wird der zugewiesene Speicher automatisch freigegeben.

Obwohl es nicht möglich ist, einen einzigartigen Zeiger an eine externe Klasse zu übergeben, können Sie den rohen Zeiger mit der Methode get() extrahieren und übergeben.

Hinweis

Dieser Ansatz wird im Allgemeinen nicht empfohlen, da er die Verantwortung für das Speichermanagement auf die externe Klasse überträgt. Eine bessere Alternative ist in den meisten Fällen entweder die Verwendung eines geteilten Zeigers oder die Übertragung des Besitzes des einzigartigen Zeigers in Betracht zu ziehen.

Aufgabe

Swipe to start coding

  • Vervollständigen Sie den folgenden Code so, dass der Besitz des dynamisch zugewiesenen Integers (mit dem Wert 42) sicher von ptr1 auf ptr2 übertragen wird.

Lösung

cpp

solution

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 1
toggle bottom row

book
Was Sind Einzigartige Pointers?

Einzigartige Zeiger sind wohl die einfachsten der Smart-Pointer in C++. Wie der Name schon sagt, erlaubt ein einzigartiger Zeiger, definiert als std::unique_ptr, dass die zugewiesene Ressource (das referenzierte Objekt) nur einen Besitzer hat.

Das bedeutet, dass einzigartige Zeiger keine Referenzzählung durchführen müssen, die die Anzahl der Zeiger verfolgt, die das Eigentum an einer Ressource teilen.

Die Durchsetzung dieser Eins-zu-Eins-Beziehung führt zu einem geringeren Speicheraufwand und steigert die Gesamtleistung von C++-Anwendungen.

Kopieren nicht erlaubt

Ein einzigartiger Zeiger enthält einen rohen Zeiger auf die zugewiesene Ressource/das Objekt. Es ist nicht möglich, einen einzigartigen Zeiger zu kopieren oder ihn als Wert an eine Funktion zu übergeben.

Verschieben eines einzigartigen Zeigers

Es ist jedoch möglich, das Eigentum an dem Objekt, auf das ein std::unique_ptr zeigt, mit der Funktion std::move zu übertragen.

Wenn Sie std::move verwenden, wird im Wesentlichen der Besitz des Objekts von uniquePtr1 auf uniquePtr2 "verschoben". Das bedeutet, dass nach dieser Codezeile uniquePtr1 das Objekt nicht mehr besitzt und uniquePtr2 der neue Besitzer sein wird.

Weitere Dinge zu wissen

Wenn ein einzigartiger Zeiger den Gültigkeitsbereich verlässt (z. B. eine Funktion beendet wird) oder explizit zurückgesetzt wird, wird der zugewiesene Speicher automatisch freigegeben.

Obwohl es nicht möglich ist, einen einzigartigen Zeiger an eine externe Klasse zu übergeben, können Sie den rohen Zeiger mit der Methode get() extrahieren und übergeben.

Hinweis

Dieser Ansatz wird im Allgemeinen nicht empfohlen, da er die Verantwortung für das Speichermanagement auf die externe Klasse überträgt. Eine bessere Alternative ist in den meisten Fällen entweder die Verwendung eines geteilten Zeigers oder die Übertragung des Besitzes des einzigartigen Zeigers in Betracht zu ziehen.

Aufgabe

Swipe to start coding

  • Vervollständigen Sie den folgenden Code so, dass der Besitz des dynamisch zugewiesenen Integers (mit dem Wert 42) sicher von ptr1 auf ptr2 übertragen wird.

Lösung

cpp

solution

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 1
Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
We're sorry to hear that something went wrong. What happened?
some-alt