Direkt zum Hauptbereich

Konzepte: Smartpointer in C++

Heute habe ich mich, seit längerer Zeit, im Rahmen einer Vorlesung mal wieder mit C++ befasst. Neben der Syntax zur Initialisierung von Klassen (insbesondere der Zuweisung der Inhalte an die Membervariablen, was das Konstruktorschreiben wesentlich erleichtert) waren Smartpointer ein relevantes Thema. Besonders befasst habe ich mit mit unique_ptr bzw. auto_ptr und shared_ptr, auf deren Konzepte ich kurz genauer eingehen möchte.


Smartpointer?

Smartpointer sind Pointer, die die normalen C-Referenzen wrappen und dadurch eine gewisse Garbage-Collection darstellen. Sie versuchen sicher zu stellen, dass keine mehrfachen deletes auf Zeiger aufgerufen werden oder Speicherlecks durch fehlende deletes zu vermeiden.


Unique-ptr

Unique-pointer, bzw. in älteren Fassungen auto-ptr (Referenz: Hier) dienen dazu, einen eindeutigen Eigentümer für Pointer zu bestimmen. Mehrere Eigentümer sollten nicht erlaubt sein. Das Konzept ist aber nur hilfreich, wenn der Besitzer klar bestimmbar ist. Ein einfaches Beispiel wäre eine Staffelstab, der zwischen beliebig vielen Robotern hin- und hergegeben werden kann. Es ist eindeutig bestimmbar, dass der Stab nur bei einem Roboter sein kann. Mit Hilfe eines unique-pointers kann der eindeutige Besitzer gesichert werden. Sobald jedoch unklar ist, wer der Besitzer eines Objektes ist, sollte ein anderes Konzept verwendet werden.



Shared-ptr

Der Shared-Pointer dient dazu, für ein Objekt eine blebiege Anzahl an Eigentümer festzulegen und das Objekt erst dann zu löschen, wenn kein Eigentümer mehr da ist. Die Referenz hierfür ist hier zu finden. Ein einfaches Beispiel hierfür ist ein Buffet, an dem mehrere Roboter teilnehmen. Das Buffet soll erst aufgeräumt werden, solange Roboter da sind und daran teilnehmen. Shared-Pointer funktionieren über einen internen Referenzenzähler, der die Besitzer zählt. Der Zeiger wird erst bei 0 Besitzern freigegeben. Shared-ptr sollten vor allem bei komplexen, aber größtenteils unveränderlichen Eigentumsverhältnissen genutzt werden. Bei vielen, kleinen Objekten die oft verschoben werden, ist davon abzuraten. Die Laufzeit ist hierfür zu groß.



Beispiele

Die oben genannten Roboterbeispiele sind in diesem Repository zu finden.

Kommentare

Beliebte Posts aus diesem Blog

Einführung in Xbase mit Xtext : Javatypen in Xtext

Folgendes Problem: Ich hab irgendwo Xtext gelernt. In der Uni, in einem Internet-Tutorial oder beim Surfen auf dem Pott. "Warum nicht einfach mal ne Sprache entwickeln, die statt der bekannten Keywords, Scrubs-Zitate benutzt? Da ist Xtext schließlich da!" - Das ist korrekt. Allerdings muss man dann ja das komplette Scoping, Typenberechnung, Validierung und Codegeneration selbst übernehmen. Möchte ich das? Nein. Eine mögliche Lösung hierfür ist Xbase . Was ist Xbase? Xbase ist eine Erweiterung von Xtext. Hierbei wird das Javatypsystem benutzt, um die Vorteile dessen zu nutzen. Die Typisierung, das Scoping und auch die Validierung ("Kann ich dieser Variable diesen Wert zuordnen?") wird hierbei bereits von Haus aus vorgegeben. Weiterhin werden auch IDE-Features wie der Debugger out-of-the-box mitgeliefert. Weitere Details hierzu sind in der Dokumentation hier zu finden. Erste Schritte in Xbase 1. Voraussetzungen Zunächst wird eine laufende Version von Eclipse

Basic Type Mapping mit Xbase

Folgendes Problem: Die Bezeichnungen "int" oder "double" sind einfach hässlich. Welcher "normale" Mensch weiß denn, was double bedeutet? .. Ok, ich gehe davon aus, dass jeder Leser hier tatsächlich weiß, wofür das steht. Dennoch möchte man eventuell den primitiven Datentypen andere Namen geben. Zum Beispiel zum Entwicklung einer Programmiersprache bestehend aus "How I Met Your Mother"-Zitaten, bei der "Ted" für den Datentyp "int" und "Robin" für "double". steht. Nun zum technischen: Zunächst muss die Variablendeklaration definiert werden. Diese wird anschließend als zusätzliche XPrimaryExpression hinzugefügt. Variable returns XVariableDeclaration: {Variable} writeable?='variable' simpleName=ID ':' typing=('Ted'|'Robin' /* more types */); Normalerweise wird bei Xbase im feld type der XVariableDeclaration eine JvmTypeReference gesetzt, die auf den Java Typen zeigt. D