The ara::com::SamplePtr behaves as a std::unique_ptr as long as the event/ field is subscribed to, or the Proxy it belongs to is not destroyed. The precondition defined in [SWS_CM_00085] and [SWS_CM_00087] must be fulfilled. Otherwise it is considered a violation.
Note: The SamplePtr is always passed with a const SampleType to the callable in GetNewSamples() (see [SWS_CM_00701]). Therefore the sample datatype (typename T) and the SamplePtr operators using the sample datatype (typename T) are implicitly declared as const. This means that the sample data will always be read-only.
Ermöglicht den exklusiven Lesezugriff auf empfangene Ereignisse und steuert die Lebensdauer des Middleware-Speichers.
KI-GENERIERTungeprüftModell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: f5d97c2beaf2HerkunftOffene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13
Ermöglicht den exklusiven Lesezugriff auf empfangene Ereignisse und steuert die Lebensdauer des Middleware-Speichers.
Die Template-Klasse kapselt den exklusiven Besitz empfangener Ereignis-Samples nach dem Vorbild von std::unique_ptr und gewährt der Anwendung direkten, unveränderlichen Lesezugriff auf Puffer der Middleware (EXP ARAComAPI §5.3.5.4). Instanzen werden bei der Abfrage neuer Samples übergeben, lassen sich ausschließlich per Move-Semantik übertragen und halten den Speicherplatz belegt ([SWS_CM_11537]). Erst die Zerstörung des Zeigers oder eine explizite Nullung gibt den Puffer-Slot wieder frei. Die Gültigkeit setzt voraus, dass das Ereignis abonniert bleibt und der zugehörige Proxy existiert.
Kontext
Die Template-Klasse ara::com::SamplePtr stellt in der Adaptive Platform das zentrale Zugriffs- und Besitzmodell für empfangene Ereignisdaten (Event Samples) dar (EXP ARAComAPI §5.3.5.4). Semantisch bildet die Klasse einen exklusiven Smart-Pointer nach dem Vorbild von std::unique_ptr nach (EXP ARAComAPI §5.3.5.4). Die primären Interaktionspartner sind die Anwendungsebene, das empfangende Event- bzw. Proxy-Objekt und die zugrunde liegende Kommunikations-Middleware ara::com, welche die Pufferressourcen verwaltet (EXP ARAComAPI, S. 44, EXP ARAComAPI, S. 50).
Das Konzept verfolgt ausdrücklich einen referenzbasierten Zero-Copy-Ansatz: Anstatt Ereignisdaten per Wertkopie an die Anwendung zu übergeben, reicht ara::com Zeiger bzw. Referenzen auf zentrale Kommunikationspuffer weiter (EXP ARAComAPI, S. 50). In typischen 1:N-Verteilungsszenarien können lokale Ereignis-Caches dadurch rein über Referenzaktualisierungen bedient werden, was den Speicheraufwand und die Latenz minimiert (EXP ARAComAPI, S. 50). Der Zugriff auf die Nutzdaten ist konzeptionell strikt lesend ausgelegt: Bei der Bereitstellung wird SamplePtr stets mit einem konstanten Nutzdatentyp instanziiert (ara::com::SamplePtr<SampleType const>), womit alle Zugriffsoperatoren implizit konstant sind (EXP ARAComAPI, S. 39, EXP ARAComAPI, S. 44, [SWS_CM_00701]).
Lebenszyklus
Instanzen von SamplePtr können als leere Zeiger über den Standardkonstruktor oder mit nullptr erzeugt werden ([SWS_CM_11534], [SWS_CM_11535]). Gültige, mit Nutzdaten belegte Instanzen entstehen hingegen innerhalb der Middleware bei der Deserialisierung von Ereignissen in Puffer-Slots und werden im Rahmen von GetNewSamples() an ein anwendungsseitiges Callable übergeben (EXP ARAComAPI, S. 44).
Mit der Übergabe findet ein vollständiger Eigentumsübergang (Ownership Transfer) an die Anwendung statt (EXP ARAComAPI §5.3.5.4). Um die Exklusivität des Besitzes zu garantieren, sind Kopierkonstruktor und Kopierzuweisungsoperator gelöscht ([SWS_CM_11536], [SWS_CM_11538]). Eine Übertragung des verwalteten Speicher-Slots ist ausschließlich über Move-Konstruktion oder Move-Zuweisung möglich ([SWS_CM_11537], [SWS_CM_11540]), während Swap() den Tausch zweier Zeigerinhalte erlaubt ([SWS_CM_11544]).
Solange eine SamplePtr-Instanz existiert und das Sample hält, kann die Middleware den belegten Speicherplatz nicht zurückfordern oder neu beschreiben (EXP ARAComAPI §5.3.5.4). Die Freigabe des Middleware-Slots erfolgt erst, wenn die Lebensdauer des SamplePtr durch Aufruf des Destruktors endet ([SWS_CM_11547]) oder der Zeiger explizit mittels Reset(nullptr) bzw. Zuweisung von nullptr geleert wird ([SWS_CM_11539], [SWS_CM_11545]).
Der typische Ablauf des Datenzugriffs gliedert sich in folgende Schritte:
Sample-Abfrage anstoßen: Die Anwendung ruft am Ereignis-Proxy GetNewSamples() auf und übergibt eine passende Callback-Funktion mit der Signatur void(ara::com::SamplePtr<SampleType const>) sowie eine Obergrenze für die Anzahl abzuholender Samples (EXP ARAComAPI, S. 44).
Übergabe an den Callback: Liegen neue Daten vor und ist das Pufferkontingent nicht erschöpft, deserialisiert die Middleware das Sample und übergibt die neue SamplePtr-Instanz an das Callback (EXP ARAComAPI, S. 44).
End-to-End-Status prüfen: Über GetProfileCheckStatus() kann die Anwendung das Ergebnis der E2E-Schutzprüfung für das vorliegende Datenpaket abfragen ([SWS_CM_90420]).
Daten lesen: Die Anwendungslogik greift über operator* ([SWS_CM_11541]), operator-> ([SWS_CM_11542]) oder die Methode Get() ([SWS_CM_11546]) lesend auf das verwaltete Objekt zu.
Weiterverarbeitung oder Freigabe: Soll das Sample über den Callback hinaus persistiert werden, verschiebt die Anwendung den Zeiger per Move-Konstruktion in eigene Speicherstrukturen ([SWS_CM_11537]). Verbleibt der Zeiger im Gültigkeitsbereich des Callbacks, wird er beim Verlassen automatisch zerstört ([SWS_CM_11547]), was den Slot in der Middleware umgehend freigibt (EXP ARAComAPI §5.3.5.4).
Beim Einsatz von SamplePtr sind spezifische Randbedingungen und Fehlerquellen zu beachten:
Erschöpfung des Pufferkontingents: Die Middleware überwacht bei jedem Aufruf von GetNewSamples(), ob die Anzahl der aktuell von der Anwendung gehaltenen Samples das zuvor beim Aufruf von Subscribe() zugesicherte Kontingent überschreitet. Ist das Kontingent überschritten, verweigert GetNewSamples() die Ausgabe weiterer Samples und gibt stattdessen einen ara::core::ErrorCode zurück (EXP ARAComAPI, S. 44, EXP ARAComAPI, S. 45).
Ungültigkeit durch Abonnementverlust oder Proxy-Zerstörung:SamplePtr verhält sich nur solange deterministisch wie ein std::unique_ptr, wie das zugrunde liegende Ereignis abonniert bleibt und die übergeordnete Proxy-Instanz existiert. Das Vorhalten von Zeigern über das Ende des Abonnements oder die Zerstörung des Proxys hinaus gilt als Verletzung der Vorbedingungen.
Zeigergültigkeit und Null-Zustand: Über operator bool() lässt sich der Belegungszustand des Zeigers auswerten ([SWS_CM_11543]). Die Dereferenzierung eines leeren Zeigers via operator* oder operator-> führt zu undefiniertem Verhalten. Alle Zugriffs- und Modifikationsmethoden sind als noexcept deklariert ([SWS_CM_11541], [SWS_CM_11542], [SWS_CM_11546]).
E2E-Validierungsfehler: Ein gültig empfangener Zeiger garantiert nicht zwingend fehlerfreie Übertragungsdaten; über den Rückgabewert von GetProfileCheckStatus() muss die Anwendung prüfen, ob die End-to-End-Absicherung Datenkorruption oder Übertragungsverzögerungen signalisiert ([SWS_CM_90420]).
Dieser Klassen-Leitfaden wurde durch einen KI-Kurations-Assistenten auf Basis der AUTOSAR-Spezifikationen für Adaptive Platform Release R25-11 generiert.
KI-GENERIERTungeprüftModell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 1cc8beae7ae3HerkunftOffene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13
Verwendung und Semantik
Die Funktion Get ist eine parameterlose Elementfunktion der Klasse ara::com::SamplePtr aus dem Header ara/com/service/sample_ptr.h[SWS_CM_11546]. Sie liefert synchron einen Rohzeiger vom Typ T* auf das durch die Instanz verwaltete Objekt zurück [SWS_CM_11546]. Im Unterschied zu asynchronen Abfragen von Service-Feldern, die ein ara::core::Future bereitstellen [SWS_CM_00112], erfolgt dieser Zugriff unmittelbar im aufrufenden Thread.
Fehlerbehandlung und Randbedingungen
Die Methode ist als noexcept deklariert und als ausnahmesicher (exception safe) spezifiziert [SWS_CM_11546]; Fehlerzustände über C++-Exceptions treten nicht auf. Falls die Instanz aktuell kein Objekt verwaltet, dürfte der zurückgegebene Zeiger vermutlich nullptr sein. Frage Q-d850bd8ee144369a (offen) Vor der Weiterverarbeitung des referenzierten Datums muss sichergestellt sein, dass die E2E-Überwachung den Zustand ara::com::e2e::SMState::kValid aufweist und die Statusprüfung des Profils keinen Fehler ergab [SWS_CM_90422].
Zusammenspiel und Abgrenzung
Im Kommunikationsmanagement dient Get dem direkten Datenzugriff auf empfangene Werte (Samples), wie sie im Rahmen des Sample-Managements bereitgestellt werden AUTOSAR_AP_EXP_ARAComAPI §10 „GetNewSamples“. Diese Funktion ist klar von anderen Get-Operationen abzugrenzen:
Feld-Getter: Das Abrufen von Service-Feldern am Proxy geschieht über Get() mit Rückgabe eines ara::core::Future[SWS_CM_00112], wofür serverseitig ein Handler registriert werden kann [SWS_CM_00114].
E2E-Zustand: Der Überwachungszustand eines Feld-Getters wird separat über GetE2EStateMachineStateGetter ermittelt [SWS_CM_00145].
Dieser Text wurde von einer KI erstellt und basiert auf dem AUTOSAR-Release R25-11.
KI-GENERIERTungeprüftModell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 0a03c7966b10HerkunftOffene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13
Die Elementfunktion Reset der Klasse ara::com::SamplePtr dient dem Zurücksetzen des Zeigers auf das verwaltete Objekt [SWS_CM_11545]. Als Parameter übernimmt sie den Wert other vom Typ std::nullptr_t. Der Aufruf ersetzt das aktuell gehaltene Objekt durch einen Nullzeiger und gibt keinen Wert zurück (void) [SWS_CM_11545].
Hinsichtlich der Fehlerbehandlung und Ausnahme-Sicherheit ist die Methode mit noexcept deklariert und als uneingeschränkt ausnahmesicher (exception safe) spezifiziert [SWS_CM_11545]. Es werden weder C++-Exceptions geworfen noch spezifische Fehlercodes zurückgemeldet.
Im Gesamtsystem erfüllt das Freigeben von SamplePtr-Instanzen eine wesentliche Vorbedingung zur Vermeidung von Speicherfehlern:
Eine vergleichbare Pflicht formuliert [SWS_CM_00085] vor dem Abmelden von Events oder Feldern (Unsubscription).
Interpretation: Der explizite Aufruf von Reset(nullptr) dürfte in Anwendungsszenarien das direkte Mittel sein, um die Besitzschaft an einem Event-Sample deterministisch vor solchen Lebenszyklusübergängen aufzugeben, wenn der Zeiger nicht automatisch seinen Gültigkeitsbereich verlässt. Frage Q-a615fa4078ab03ce (offen)
Dieser Nutzungshinweis wurde automatisiert auf Basis der AUTOSAR-Spezifikation R25-11 erstellt.
KI-GENERIERTungeprüftModell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 18d4b3f3f0f9HerkunftOffene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13
Verwendung
Die Funktion Swap ist eine Elementmethode der Klasse ara::com::SamplePtr und dient dem Vertauschen des aktuell verwalteten Objekts mit einer anderen Instanz ([SWS_CM_11544]). Die Schnittstelle ist im Header ara/com/service/sample_ptr.h definiert (AUTOSAR_AP_SWS_CommunicationManagement §8.9.1.1.3.4 „Swap“).
Der Aufruf erfolgt synchron und erwartet folgenden Parameter:
other: Referenz auf eine weitere Instanz von ara::com::SamplePtr, deren verwaltetes Objekt mit dem von *this ausgetauscht wird ([SWS_CM_11544]).
Die Methode besitzt keinen Rückgabewert (void) ([SWS_CM_11544]).
Fehlerbehandlung
Die Signatur ist mit noexcept deklariert und als ausnahmesicher (exception safe) klassifiziert ([SWS_CM_11544]). Der Aufruf löst keine Ausnahmen aus und liefert keine Fehlercodes zurück.
Nebenläufigkeit und Einschränkungen
Da Swap den Zustand zweier Objekte (*this und other) gleichzeitig verändert, dürften parallele Aufrufe auf mindestens einer der beteiligten Instanzen ohne externe Synchronisation vermutlich nicht thread-sicher sein. Frage Q-d906e8c05aefbd15 (offen)
Zusammenspiel
Die Methode ist integraler Bestandteil der Klasse ara::com::SamplePtr ([SWS_CM_11544]). Sie ermöglicht die effiziente Eigentumsübertragung oder Neuzuweisung von empfangenen Daten-Samples in Kommunikationsabläufen, ohne dass das zugrunde liegende Nutzdatenobjekt kopiert werden muss.
Dieser Nutzungshinweis wurde automatisiert auf Basis der Spezifikationsdokumente erstellt.
gemini-3.8-flash-medium· 2026-10-13