Kursinhalt
C++ Smart Pointers
C++ Smart Pointers
Was Sind Shared Pointers?
Geteilte Zeiger, definiert als std::shared_ptr
, sind eine weitere Art von Smart-Pointer, die bei der automatischen Speicherverwaltung helfen. Sie sind seit C++11 Teil der C++-Standardbibliothek und ein grundlegendes Konzept, das jeder C++-Entwickler beherrschen sollte.
Genau wie ein einzigartiger Zeiger wird ein geteilter Zeiger verwendet, um die Adresse eines dynamisch zugewiesenen Objekts zu speichern. Der Hauptunterschied zwischen den beiden Zeigertypen besteht darin, dass ein geteilter Zeiger von Natur aus teilbar ist. Er kann sicher mehr als einen Besitzer haben. Tatsächlich sollte er nur verwendet werden, wenn ein Objekt mehrere Besitzer haben muss.
Wie funktionieren geteilte Zeiger?
Im Gegensatz zu einzigartigen Zeigern führen geteilte Zeiger eine Referenzzählung. Die Referenzzählung eines geteilten Zeigers verfolgt die Anzahl der geteilten Zeiger, die derzeit dasselbe Objekt referenzieren (besitzen).
Merken
Das Erstellen eines neuen geteilten Zeigers für ein dynamisches Objekt setzt die Referenzzählung auf 1. Das Hinzufügen eines weiteren geteilten Zeigers erhöht die Zählung auf 2 und so weiter.
Ebenso wird die Referenzzählung automatisch verringert, wenn ein geteilter Zeiger außer Gültigkeitsbereich gerät oder explizit zurückgesetzt wird. Sobald die Referenzzählung 0 erreicht, bedeutet dies, dass kein geteilter Zeiger mehr das Objekt referenziert, und der Speicher des Objekts wird automatisch freigegeben.
Dies ist eine narrensichere Methode, um eine sichere gemeinsame Nutzung dynamischer Daten in C++ zu gewährleisten. Denn selbst beim Teilen von Daten ist das Programm weniger anfällig für Speicherlecks/-beschädigungen, und Sie müssen nicht manuell delete
aufrufen.
Ein Beispiel aus der realen Welt
Schauen wir uns einen praktischen Anwendungsfall von Shared Pointers an. Angenommen, Sie entwickeln eine komplexe Multimedia-Anwendung, die große Bilder verarbeitet. Sie haben Dutzende von C++-Klassen geschrieben, um das Parsen und Verarbeiten der Bilddateien effizient zu handhaben. Jede Klasse benötigt Zugriff auf dieselben Bilddaten.
Der sicherste Weg, dies zu tun, wäre die Verwendung von Shared Pointers. Sie stellen sicher, dass der Speicher automatisch freigegeben wird, wenn keine der Klassen die Bilddaten mehr benötigt.
Danke für Ihr Feedback!