- Smart pointer
-
Intelligente Zeiger oder Smart Pointers werden in vielen gängigen objektorientierten Programmiersprachen, meistens C++, verwendet. Es sind spezielle Objekte, welche einfache Zeigervariablen einkapseln und mit zusätzlichen Funktionen und Eigenschaften ausstatten. Diese Objekte erweitern also einfache Zeiger (Pointer), statten sie mit mehr Funktionalität aus und lassen sich dennoch wie normale Zeigervariablen benutzen und dereferenzieren.
Inhaltsverzeichnis
Beispiele
Iteratoren
Typische intelligente Zeiger sind die in der C++-Standardbibliothek eingesetzten Iteratoren. Mit Iteratoren können komplexere Datenstrukturen, wie z.B. Bäume oder verkettete Listen, leicht gehandhabt werden und wie normale Zeiger dereferenziert und benutzt werden. Die bekannten Operatoren der Zeiger-Arithmetik werden auch unterstützt und können zum Durchlaufen einer komplexeren Datenstruktur wie gewohnt angewendet werden.
Freigabe dynamischen Speichers
Die C++-Standardbibliothek definiert ebenfalls das Klassentemplate auto_ptr, das einen Zeiger auf dynamischen Speicher verwaltet. Wird das Objekt zerstört, wird auch der Speicher, auf den der Zeiger verweist, freigegeben. Dies hilft, Speicherlecks zu vermeiden.
Referenzzählende Zeiger
Um das versehentliche Löschen von Speicherbereichen zu vermeiden, auf die noch immer von dem einen oder anderen Zeiger verwiesen wird, verwendet man referenzzählende Zeiger. Dazu beinhaltet dieser Typ von intelligenten Zeigern eine Zählervariable, die bei jedem Kopieren des Zeigers inkrementiert wird. Versucht nun ein Programmteil den Speicher freizugeben, auf den der Zeiger verweist, so wird die Zählervariable zunächst dekrementiert. Erst, wenn der Zähler den Wert 0 erreicht, wird der Speicher tatsächlich freigegeben (→ Referenzzählung).
Copy on Write
In einigen Fällen werden mehrere Kopien von Objekten erzeugt, von denen nur einige verändert werden sollen. In solchen Fällen empfehlen sich Copy-On-Write-Zeiger, die die von ihnen referenzierten Daten erst dann kopieren, wenn schreibend auf sie zugegriffen wird. Bis dahin werden Zeiger auf die Originalobjekte behalten.
Wikimedia Foundation.