c't 14/2019
S. 182
Know-how
PP: Singletons in C++
Aufmacherbild
Bild: Albert Hulm

Einzigartig

Singletons sauber in C++ programmieren

Ob für Programmeinstellungen, Drucker-Spooler oder Logger – manchmal braucht man nur genau eine Instanz einer Klasse und möchte darüber hinaus sicherstellen, dass es keine weiteren davon gibt. Das erreicht man mit Singletons.

Kürzlich hatte ich das Problem, dass ich in einem C++-Projekt gewährleisten wollte, nur ein einziges Objekt einer Klasse zu haben. Dass so was mit Singletons geht, wusste ich noch, aber wie genau, das hatte ich vergessen. Wenn man auf Stack Overflow und Konsorten nach Singleton sucht, findet man haufenweise Lösungen, aber irgendwie fehlte es jeder an Vollständigkeit.

Also selber ran ans Werk und mal ausbaldowert, welche Möglichkeiten es gibt, einen Logger als Singleton zu implementieren. Der Logger war nämlich die Klasse, von der es nur eine Instanz geben sollte. Nun hätte ich diese Instanz einfach in einer globalen Variable hinterlegen können, aber das hätte noch nicht verhindert, dass andere Programmkomponenten eigene davon erzeugen. Würden sie das tun, könnte es zu Concurrency-Problemen beim Schreiben in die Log-Datei kommen. Wie schlimm sich diese auswirken, hängt von der zugrunde liegenden I/O-Schicht ab. Außerdem sind globale Variablen pfui.