template <typename T> class UniqueHandle final {...};
Handle to a ReadAccessor or ReadWriteAccessor. A UniqueHandle is returned by the functions OpenFileReadOnly(), OpenFileWriteOnly(), and OpenFileReadWrite().
Verwaltet den exklusiven, verschiebbaren Zugriff auf Datei-Accessor-Objekte mit RAII-Semantik.
KI-GENERIERTungeprüftModell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 7be811cdf7d8HerkunftOffene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13
Verwaltet den exklusiven, verschiebbaren Zugriff auf Datei-Accessor-Objekte mit RAII-Semantik.
Das Klassentemplate ara::per::UniqueHandle verwaltet den exklusiven Besitz von Datei-Accessor-Objekten der AUTOSAR-Persistenz im Rahmen einer strikten Move-Only-Semantik. Nach dem Erhalt über Dateizugriffsfunktionen muss die Instanz vor jeglicher Nutzung verpflichtend mittels operator bool() auf Gültigkeit geprüft werden [SWS_PER_00371]. Ein Aufruf anderer Operatoren an einem leeren oder transferierten Handle führt zu undefiniertem Verhalten [SWS_PER_00399]. Sämtliche Operationen sind als noexcept deklariert, wobei Lesezugriffe threadsicher sind, modifizierende Operationen hingegen nicht.
Kontext
Das Klassentemplate ara::per::UniqueHandle dient als typsicherer Zugriffs-Handle auf Ressourcenobjekte der AUTOSAR-Adaptive-Persistenz, namentlich ReadAccessor oder ReadWriteAccessor. Es wird als Rückgabewert der Funktionen OpenFileReadOnly(), OpenFileWriteOnly() sowie OpenFileReadWrite() bereitgestellt und kapselt den exklusiven Besitz der geöffneten Dateizugriffsschnittstelle.
Lebenszyklus
Die Klasse implementiert eine strikte Move-Only-Semantik (Unique Ownership). Um versehentliche Duplizierungen des Zugriffs oder geteilten Besitz zu unterbinden, sind sowohl der Kopierkonstruktor [SWS_PER_00373] als auch der Kopierzuweisungsoperator [SWS_PER_00374] als gelöscht (delete) definiert. Eigentumsrechte können ausschließlich durch Verschieben übertragen werden: Beim Aufruf des Move-Konstruktors [SWS_PER_00371] oder der Move-Zuweisung [SWS_PER_00372] wird das übergebene Quellobjekt invalidiert und darf danach nicht mehr verwendet werden.
Ein UniqueHandle befindet sich zu jedem Zeitpunkt entweder in einem gültigen Zustand (es repräsentiert ein valides Objekt der parametrierten Klasse) oder in einem leeren bzw. invalidierten Zustand, wie er nach einem Move-Transfer vorliegt [SWS_PER_00399]. Bei Beendigung des Gültigkeitsbereichs wird der Destruktor [SWS_PER_00569] ausgeführt. Vermutlich schließt bzw. bereinigt die Zerstörung eines gültigen Handles die gekapselte Zugriffsressource automatisch. Frage Q-e7f12aa0d7c5548d (offen)
Die typische Verwendung von UniqueHandle folgt einer festgelegten Abfolge von Schritten:
Übernahme des Handles: Die Anwendung empfängt das Handle als Ergebnis eines Dateizugriffsaufrufs wie OpenFileReadOnly(), OpenFileWriteOnly() oder OpenFileReadWrite().
Zustandsprüfung: Vor jeder weiteren Operation muss der Status der Instanz verpflichtend mittels operator bool() verifiziert werden [SWS_PER_00371], [SWS_PER_00372]. Der Operator gibt true zurück, falls ein gültiges Objekt vorliegt, und false, wenn das Handle leer ist [SWS_PER_00399].
Zugriff auf das gekapselte Objekt: Bei gültigem Status wird über die Pfeil-Operatoren operator-> (nicht-konstant [SWS_PER_00360] oder konstant [SWS_PER_00361]) oder über Dereferenzierung mittels operator* (nicht-konstant [SWS_PER_00400] oder konstant [SWS_PER_00401]) auf die Methoden und Daten des Ziels zugegriffen.
Besitzübergabe oder Zerstörung: Das Handle kann bei Bedarf per std::move an eine andere Komponente übertragen werden [SWS_PER_00371] oder wird am Ende der Lebensdauer automatisch zerstört [SWS_PER_00569].
Fehlerszenarien
Ein zentrales Fehlerszenario stellt der Zugriff auf ein leeres oder transferiertes Handle dar: Die Verwendung anderer Operatoren als operator bool() an einem leeren Handle führt laut Spezifikation zu undefiniertem Verhalten (Undefined Behavior) [SWS_PER_00399]. Vor jeglicher Dereferenzierung ist daher zwingend eine Prüfung vorgeschrieben [SWS_PER_00371], [SWS_PER_00372].
Hinsichtlich Ausnahmesicherheit und Nebenläufigkeit gelten folgende Spezifikationsdetails:
Move constructor for UniqueHandle. The source handle object is invalidated and cannot be used anymore. The operator bool() shall be used to check the state of a handle object before using any other operators of the handle object.
Move assignment operator for UniqueHandle. The source handle object is invalidated and cannot be used anymore. The operator bool() shall be used to check the state of a handle object before using any other operators of the handle object.
Handle state. True if the handle represents a valid object of the templated class, False if the handle is empty (e.g. after a move operation). Using other operators than bool() of an empty handle will result in undefined behavior.
Move constructor for UniqueHandle. The source handle object is invalidated and cannot be used anymore. The operator bool() shall be used to check the state of a handle object before using any other operators of the handle object.
Move assignment operator for UniqueHandle. The source handle object is invalidated and cannot be used anymore. The operator bool() shall be used to check the state of a handle object before using any other operators of the handle object.
Handle state. True if the handle represents a valid object of the templated class, False if the handle is empty (e.g. after a move operation). Using other operators than bool() of an empty handle will result in undefined behavior.
gemini-3.8-flash-medium· 2026-10-13