Kursinhalt
C++ Smart Pointers
C++ Smart Pointers
Verschieben von Einzigartigen Zeigern
Kopieren nicht erlaubt
Ein std::unique_ptr
ist ein Smart-Pointer, der ein dynamisch zugewiesenes Objekt verwaltet und dessen ordnungsgemäße Löschung sicherstellt, wenn es außer Gültigkeitsbereich gerät. Es hat exklusives Eigentum an dem Objekt, das es verwaltet, was bedeutet, dass keine zwei std::unique_ptr
dasselbe Objekt gleichzeitig besitzen können.
main
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // This will cause a compilation error: copying is not allowed std::unique_ptr<int> second_unique_pointer = first_unique_pointer; }
Verschieben eines Unique Pointers
Obwohl Kopieren nicht erlaubt ist, können Sie das Eigentum übertragen des Objekts mit std::move
. Dies verschiebt die Ressource von einem std::unique_ptr
zu einem anderen und lässt den ursprünglichen Zeiger leer.
main
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // Transferring ownership using std::move std::unique_ptr<int> second_unique_pointer = std::move(first_unique_pointer); if (!first_unique_pointer) std::cout << "first_unique_pointer is now empty.\n"; std::cout << "second_unique_pointer owns the value: " << *second_unique_pointer << '\n'; }
Wenn Sie std::move
verwenden, wird das Eigentum des Objekts von einem einzigartigen Zeiger auf einen anderen übertragen. Danach besitzt der ursprüngliche Zeiger das Objekt nicht mehr, und der neue Zeiger wird sein Besitzer.
Swipe to start coding
Vervollständigen Sie den folgenden Code so, dass das Eigentum des dynamisch zugewiesenen Integers (mit dem Wert 42) sicher von ptr1
auf ptr2
übertragen wird.
Lösung
solution
Danke für Ihr Feedback!
Verschieben von Einzigartigen Zeigern
Kopieren nicht erlaubt
Ein std::unique_ptr
ist ein Smart-Pointer, der ein dynamisch zugewiesenes Objekt verwaltet und dessen ordnungsgemäße Löschung sicherstellt, wenn es außer Gültigkeitsbereich gerät. Es hat exklusives Eigentum an dem Objekt, das es verwaltet, was bedeutet, dass keine zwei std::unique_ptr
dasselbe Objekt gleichzeitig besitzen können.
main
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // This will cause a compilation error: copying is not allowed std::unique_ptr<int> second_unique_pointer = first_unique_pointer; }
Verschieben eines Unique Pointers
Obwohl Kopieren nicht erlaubt ist, können Sie das Eigentum übertragen des Objekts mit std::move
. Dies verschiebt die Ressource von einem std::unique_ptr
zu einem anderen und lässt den ursprünglichen Zeiger leer.
main
#include <iostream> #include <memory> int main() { std::unique_ptr<int> first_unique_pointer = std::make_unique<int>(42); // Transferring ownership using std::move std::unique_ptr<int> second_unique_pointer = std::move(first_unique_pointer); if (!first_unique_pointer) std::cout << "first_unique_pointer is now empty.\n"; std::cout << "second_unique_pointer owns the value: " << *second_unique_pointer << '\n'; }
Wenn Sie std::move
verwenden, wird das Eigentum des Objekts von einem einzigartigen Zeiger auf einen anderen übertragen. Danach besitzt der ursprüngliche Zeiger das Objekt nicht mehr, und der neue Zeiger wird sein Besitzer.
Swipe to start coding
Vervollständigen Sie den folgenden Code so, dass das Eigentum des dynamisch zugewiesenen Integers (mit dem Wert 42) sicher von ptr1
auf ptr2
übertragen wird.
Lösung
solution
Danke für Ihr Feedback!