C++ Core Guidelines: Unions sicher mit Tags unterscheiden

Die C++ Core Guidelines beschreiben im Abschnitt zu Unions einen Datentyp, dessen Mitglieder an derselben Speicheradresse beginnen. Dadurch kann eine Union zu einem Zeitpunkt nur ein Mitglied aufnehmen. Die Hinweise wurden am 20. November 2017 in einer neuen Folge der Guidelines-Reihe behandelt.

Eine Union speichert nicht selbst, welches Mitglied gerade gültig ist. Der Code muss diese Information daher korrekt verwalten. Bei einer tagged Union wird die Union um eine Kennzeichnung ergänzt, die den aktuell gespeicherten Datentyp beschreibt. So kann die Auswertung vor dem Zugriff prüfen, welche Variante vorliegt.

Gemeinsamer Speicher und aktives Mitglied

Der gemeinsame Speicher kann sinnvoll sein, wenn mehrere Varianten nie gleichzeitig benötigt werden. In Spielengines oder Werkzeugen für die Content-Produktion kann dieses Muster etwa bei kompakten Zustandsdaten und Nachrichtenstrukturen vorkommen. Der Speichergewinn geht jedoch mit zusätzlicher Verantwortung bei Lebensdauer und Zugriff einher.

Die Guidelines warnen deshalb vor nackten Unions und vor dem Einsatz einer Union zum Uminterpretieren fremder Datentypen. C++17 bietet mit std::variant außerdem einen standardisierten Variantentyp, wenn die Anwendung keine eigene Speicherrepräsentation benötigt.

Die neue Folge ergänzt die bereits beschriebenen Regeln für Operatoren und Konvertierungen der C++ Core Guidelines. Gemeinsam zielen die Hinweise auf Quellcode, dessen Bedeutung auch in großen Entwicklungsprojekten aus den Typen und Operationen erkennbar bleibt.

Weitere News

Weitere News

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein