Kapselt einen optional vorhandenen Wert typsicher im Stack-Speicher und ermöglicht zustandsabhängigen Zugriff.
Kontext
Die Klasse ara::core::Optional stellt eine standardkonforme Implementierung des Containers std::optional<T> für die Adaptive Platform bereit. Sie dient als typsichere Hülle zur Kapselung eines optionalen Werts vom Typ value_type [SWS_CORE_01102]. Durch den Einsatz entfällt die Notwendigkeit von fehleranfälligen Sentinel-Werten, speziellen Fehlerflags oder dynamischen Speicherallokationen (wie Nullzeigern) zur Kennzeichnung abwesender Daten. Die Speicherung des Objekts erfolgt direkt innerhalb des Stack-Speichers der Instanz, wodurch deterministisches Ressourcenmanagement und Cache-Lokalität im AUTOSAR-Laufzeitumfeld gewährleistet werden.
Lebenszyklus
Eine Instanz von ara::core::Optional befindet sich zu jedem Zeitpunkt in einem von zwei diskreten Zuständen: uninitialisiert (leer) oder belegt mit einem Wert vom Typ T. Der leere Ausgangszustand wird über den Standardkonstruktor [SWS_CORE_01103] oder die explizite Initialisierung mit nullopt_t [SWS_CORE_01104] eingenommen. Die Initialisierung mit einem konkreten Wert erfolgt entweder über Kopier- und Move-Konstruktoren [SWS_CORE_01105], [SWS_CORE_01106], [SWS_CORE_01109], typkonvertierende Konstruktoren [SWS_CORE_01110], [SWS_CORE_01111] oder direkt in-place via in_place_t [SWS_CORE_01107], [SWS_CORE_01108], wodurch temporäre Kopien vollständig vermieden werden.
Im laufenden Betrieb kann der Zustand mehrfach wechseln: Die Methoden emplace konstruieren einen neuen Wert direkt im Speicher des Objekts und verwerfen einen eventuell zuvor existierenden Zustand [SWS_CORE_01119], [SWS_CORE_01120]. Ebenso führen Zuweisungsoperatoren, die über Ref-Qualifier & strikt an Lvalues gebunden sind, in den belegten Zustand [SWS_CORE_01114], [SWS_CORE_01115], [SWS_CORE_01116], [SWS_CORE_01117], [SWS_CORE_01118]. Das Zurücksetzen in den leeren Zustand erfolgt deterministisch über reset() [SWS_CORE_01136] oder durch die Zuweisung von nullopt_t [SWS_CORE_01113]. Zudem können zwei Instanzen über swap effizient ihre Zustände und Dateninhalte tauschen [SWS_CORE_01121]. Beim Erreichen des Lebensendes zerstört der Destruktor das eventuell enthaltene Objekt; seine noexcept-Garantie ist dabei direkt an die Destruierbarkeit von Typ T gekoppelt [SWS_CORE_01112].
Zustandsdiagramm: Lebenszyklus und Zustandsübergänge einer Instanz von ara::core::Optional. Quellen: [SWS_CORE_01103], [SWS_CORE_01104], [SWS_CORE_01107], [SWS_CORE_01113], [SWS_CORE_01119], [SWS_CORE_01136], [SWS_CORE_01112]
Nutzungspfad
Der reguläre Ablauf umfasst die Verifikation der Belegung und das anschließende Auslesen des Werts. Zur Zustandsabfrage stehen has_value() [SWS_CORE_01129] und der explizite Konvertierungsoperator operator bool [SWS_CORE_01128] zur Verfügung.
Liegt ein Wert vor, kann auf diesen über die Dereferenzierungsoperatoren operator* ([SWS_CORE_01124], [SWS_CORE_01125], [SWS_CORE_01126], [SWS_CORE_01127]) oder operator-> ([SWS_CORE_01122], [SWS_CORE_01123]) zugegriffen werden. Ergänzend ermöglicht die Methode value() den qualifizierten Zugriff auf Lvalues und Rvalues ([SWS_CORE_01130], [SWS_CORE_01131], [SWS_CORE_01132], [SWS_CORE_01133]). Soll bei fehlender Belegung ein vordefinierter Ersatzwert herangezogen werden, bietet value_or eine direkte Ausweichstrategie ([SWS_CORE_01134], [SWS_CORE_01135]). Nach Abschluss der Verarbeitung kann das Behältnis bei Bedarf über reset() bereinigt werden [SWS_CORE_01136].
Sequenzdiagramm: Ablauf zur Zustandsprüfung und Wertextraktion. Quellen: [SWS_CORE_01128], [SWS_CORE_01129], [SWS_CORE_01131], [SWS_CORE_01134], [SWS_CORE_01136]
Fehlerszenarien
Ein fehlerhafter Zugriff liegt vor, wenn eine leere Instanz dereferenziert oder deren Wert unberechtigt angefordert wird. Die Zugriffsmethoden value(), operator* und operator-> sind in AUTOSAR Adaptive als noexcept deklariert, lösen jedoch im leeren Zustand die Verletzung IsoStdBadOptionalAccessViolation aus ([SWS_CORE_01122], [SWS_CORE_01123], [SWS_CORE_01124], [SWS_CORE_01125], [SWS_CORE_01126], [SWS_CORE_01127], [SWS_CORE_01130], [SWS_CORE_01131], [SWS_CORE_01132], [SWS_CORE_01133]). Interpretation: Da die Methoden als noexcept deklariert sind, dürfte das Auslösen der IsoStdBadOptionalAccessViolation nicht als fangbare Standard-Ausnahme propagiert werden, sondern führt vermutlich über den plattformspezifischen Verletzungsmechanismus zum sofortigen Programmabbruch. Frage Q-3c066dae2b93a9ec (offen) Aufrufer müssen daher den Belegungsstatus zwingend vor dem Auslesen validieren.
Ein weiteres Fehlerszenario betrifft die Ausnahmebehandlung bei der Typkonstruktion: Konstruktoren, Zuweisungsoperatoren, swap und emplace besitzen bedingte noexcept-Spezifikationen, die davon abhängen, ob die entsprechenden Typoperationen von T selbst als noexcept deklariert sind ([SWS_CORE_01105], [SWS_CORE_01114], [SWS_CORE_01119], [SWS_CORE_01121]). Die Fallback-Methode value_or ist zudem explizit als nicht ausnahmesicher („not exception safe“) ausgewiesen ([SWS_CORE_01134], [SWS_CORE_01135]), sodass bei der Erzeugung des Rückgabewerts auftretende Fehler an den Aufrufer weitergereicht werden.
Dieser Klassen-Leitfaden basiert ausschließlich auf den Anforderungen der Spezifikation ara::core::Optional aus AUTOSAR Adaptive R25-11.
gemini-3.8-flash-medium· 2026-10-13