Eine Implementierung des Singleton-Musters in C++Ein VorschlagIn diesem Artikel soll ein Implementierungsvorschlag für das Singleton-Muster vorgestellt werden, ohne dabei auf die verschiedenen möglichen Ausprägungen des Musters einzugehen.
Eine Diskussion des Musters befindet sich in dem Artikel
„Das Singleton Muster in C++“,
der die strukturellen Probleme einer Implementierung beleuchtet.
Das Hauptaugenmerk soll dabei auf einer möglichst einfachen Anwendung und einer guten Beherrschbarkeit liegen,
wie es in Listing 2 ansatzweise demonstriert ist.
Es bietet sich eine einfache Makroimplementierung an, wie sie in Listing 3 gezeigt wird.
Es wird nicht näher auf die Syntax der Makrodefinition in C++ eingegangen und vorausgesetzt,
dass der Leser die Makrosyntax kennt oder sich der entsprechenden Literatur bedienen kann.
Prinzipiell beruht diese Technik einfach auf Textersetzung ohne Typenprüfung.
Zurück zur Implementierung: Die Makros brauchen den Klassennamen als Parameter, um die Konstruktoren, die Instanziierungsmethode
und die statische Instanz zu definieren. Nun können sie für jede beliebige Klasse angewendet werden.
Dabei stellt die gewählte Implementierung einige Bedingungen für die Anwendung:
erstens muss die Anwendung des Definitionsmakros in einer CPP-Datei stehen und nicht in einem Header. Zweitens muss
dem Entwickler bekannt sein, dass er durch die Verwendung des Makros eine Funktion exemplar() bekommt,
mit der er die Instanz des Singletons abrufen kann. Das sind zwar Vorbedingungen, die die Implementierung
nicht besonders elegent machen, dafür aber einigermaßen sicher. Schließlich ist das Singleton ein sehr
problematisches Muster und es kann nicht oft genug darauf hingewiesen werden, dass dessen Einsatz häufig
mehr Problemfelder eröffnet, als es zu beseitigen hilft. Ralf Schneeweiß - 29. September 2003 Literatur
Anhang
Die gezeigte Implementierung wurde mit den folgenden Compilern getestet:
Trotz sorgfältigen Testens geschieht ein Einsatz der gezeigten Implementierung in Software in eigener Verantwortung und auf eigene Gefahr. Der Autor übernimmt keinerlei Verantwortung für mögliche Fehlfunktionen, die im Zusammenhang mit dem Einsatz der beschriebenen Singletonimplementierung auftreten.
| |||||||||||||||||||||