0Pricing
C++ Academy · Lektion

unique_ptr und exklusiver Besitz

Drücken Sie Semantik mit genau einem Besitzer mithilfe von unique_ptr und Move-only-Typen aus.

unique_ptr und exklusiver Besitz ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Der Smart Pointer mit Alleinbesitz

std::unique_ptr<T> besitzt ein Heap-Objekt. Wenn der unique_ptr zerstört wird, löscht er das Objekt. Er kann nicht kopiert, sondern nur verschoben werden.

unique_ptr erstellen

Verwenden Sie std::make_unique (C++14) – ausnahmesicher und kompakt.

#include <memory>
auto w = std::make_unique<Widget>();         // default-constructed
auto p = std::make_unique<Point>(3, 4);       // forwarded args

Wie einen Pointer verwenden

unique_ptr unterstützt die üblichen Pointer-Operationen.

auto p = std::make_unique<Point>(3, 4);
std::cout << p->x;        // arrow access
std::cout << (*p).y;      // dereference
if (p) std::cout << "non-null";

Nicht kopierbar – verschiebbar

Kopieren würde zwei Besitzer bedeuten – das widerspricht „unique“. Durch Verschieben wird der Besitz übertragen.

std::unique_ptr<int> a = std::make_unique<int>(1);
std::unique_ptr<int> b = std::move(a);
// a is now empty, b owns the int

An Funktionen übergeben

Als Wert (mit std::move): Besitz übertragen. Als Referenz: ausleihen, ohne Besitz zu übernehmen.

void consume(std::unique_ptr<Widget> w);   // takes ownership
void inspect(const Widget& w);              // borrows

auto w = std::make_unique<Widget>();
consume(std::move(w));
// w is now empty
inspect(*w);                                // (after re-creating)

Aus Funktionen zurückgeben

Eine Funktion, die ein Objekt erstellt und dessen Besitz zurückgibt, sollte std::unique_ptr zurückgeben.

std::unique_ptr<Widget> create() {
    return std::make_unique<Widget>();
}

Zurücksetzen und Freigeben

reset() löscht das aktuelle Objekt und übernimmt optional den Besitz eines neuen. release() gibt den Besitz auf und gibt den Raw Pointer zurück.

auto p = std::make_unique<int>(10);
p.reset(new int(20));    // delete the old, own the new
int* raw = p.release();   // p is now empty
delete raw;               // caller must delete

get(): Raw Pointer ausleihen

get() gibt den Raw Pointer zurück, ohne den Besitz aufzugeben. Verwenden Sie dies für Interoperabilität ohne Besitzübertragung.

auto p = std::make_unique<int>(42);
legacy_api(p.get());      // p still owns it

unique_ptr für Arrays

Verwenden Sie für Arrays unique_ptr<T[]>. Der indizierte Zugriff erfolgt mit []; beim Zerstören wird delete[] aufgerufen.

auto arr = std::make_unique<int[]>(10);
arr[0] = 99;
std::cout << arr[0];

Benutzerdefinierte Deleter

Geben Sie einen benutzerdefinierten Deleter als Templateparameter an, wenn es sich bei der Ressource nicht um rohen Speicher handelt, etwa bei Dateihandles oder Betriebssystemressourcen.

auto closer = [](FILE* f) { if (f) std::fclose(f); };
std::unique_ptr<FILE, decltype(closer)> file(std::fopen("a.txt","r"), closer);

Leistung

Mit dem Standard-Deleter ist unique_ptr genauso groß und schnell wie ein Raw Pointer – ohne zusätzlichen Aufwand.

Kurzer Test

Warum verbietet std::unique_ptr das Kopieren?

Zusammenfassung

std::unique_ptr ist der Smart Pointer für den Standardfall: kein zusätzlicher Aufwand, exklusiver Besitz, verschiebbar, aber nicht kopierbar. Bevorzugen Sie std::make_unique zur Erstellung.

Häufig gestellte Fragen

Ist die Lektion „unique_ptr und exklusiver Besitz“ kostenlos?

Ja — der vollständige Text von „unique_ptr und exklusiver Besitz“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „unique_ptr und exklusiver Besitz“?

Drücken Sie Semantik mit genau einem Besitzer mithilfe von unique_ptr und Move-only-Typen aus. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „unique_ptr und exklusiver Besitz“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum Smart Pointer rohe new- und delete-Operatoren ersetzen
  2. unique_ptr und exklusiver Besitz
  3. shared_ptr und weak_ptr: geteilte Besitzverhältnisse
  4. Benutzerdefinierte Deleter und Make-Funktionen
← Zurück zu C++ Academy