Kursinhalt
C++ Smart Pointers
C++ Smart Pointers
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.
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
aufptr2
übertragen wird.
Lösung
solution
Danke für Ihr Feedback!
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.
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
aufptr2
übertragen wird.
Lösung
solution
Danke für Ihr Feedback!