Обеспечивает комбинированное чтение и запись файловых данных через общий интерфейс доступа.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 6c41c48fc5a7ПроисхождениеОткрытые вопросы (3)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Обеспечивает комбинированное чтение и запись файловых данных через общий интерфейс доступа.
Класс ara::per::ReadWriteAccessor комбинирует интерфейсы ReadAccessor и WriteAccessor, позволяя читать и записывать файловые данные в AUTOSAR Adaptive Platform через общий объект. Прямое инстанцирование через конструктор по умолчанию недопустимо, так как он явно удален [SWS_PER_00462]. При уничтожении экземпляра деструктор, объявленный как noexcept, гарантирует полную безопасность исключений, однако явно специфицирован как непотокобезопасный и поэтому требует синхронизированного доступа [SWS_PER_00598].
Контекст
Класс ara::per::ReadWriteAccessor представляет собой центральный интерфейс в модуле per (Persistency) платформы AUTOSAR Adaptive Platform для чтения и записи файловых данных. Он объединяет функциональные возможности раздельного доступа на чтение и запись, сводя воедино возможности базовых классов ReadAccessor и WriteAccessor. Объявление класса осуществляется через заголовочный файл ara/per/read_write_accessor.h[SWS_PER_00462].
В типовой архитектуре ReadWriteAccessor определен посредством множественного наследования как подкласс ReadAccessor и WriteAccessor и помечен спецификатором final. Это предотвращает дальнейшее наследование разработчиками приложений и гарантирует сохранение неизменной семантики комбинированного доступа. Следовательно, в качестве партнеров по взаимодействию выступают оба специализированных базовых класса, чьи общие контракты интерфейсов проецируются на унифицированный уровень доступа к файлам.
Контекстная диаграмма: иерархия наследования и ролевые отношения между ReadWriteAccessor, ReadAccessor и WriteAccessor. Источники: [SWS_PER_00462], [SWS_PER_00598]
Жизненный цикл
Жизненный цикл экземпляра ara::per::ReadWriteAccessor подчиняется строгим структурным требованиям. В соответствии с [SWS_PER_00462] конструктор по умолчанию без параметров явно удален (ReadWriteAccessor() = delete;). Поэтому прямое создание без контекста или параметров недопустимо. С архитектурной точки зрения (интерпретация), экземпляры этого класса, как правило, предоставляются вышестоящими функциями управления или механизмами создания подсистемы персистентности, как только файл открывается для комбинированного режима чтения и записи. Вопрос Q-9b390ab33102d524 (открытый)
Освобождение экземпляра происходит через деструктор ~ReadWriteAccessor(), который объявлен как final и noexcept[SWS_PER_00598]. Завершение жизненного цикла объекта требует особого внимания с точки зрения параллелизма: в спецификации деструктор явно классифицирован как непотокобезопасный («not thread-safe») [SWS_PER_00598]. Таким образом, вызывающее программное обеспечение должно гарантировать, что во время уничтожения объекта не происходят параллельные операции чтения или записи над тем же экземпляром. Согласно интерпретации, деструктор при штатном выходе из области видимости, вероятно, отвечает за закрытие открытых файловых дескрипторов, а также очистку оставшихся внутренних состояний. Вопрос Q-49e2fdfd53789afd (открытый)
Что касается владения, объект обычно находится в локальной области видимости использующего компонента или управляется через структуры указателей. Поскольку одновременная модификация и уничтожение не защищены, экземпляр (интерпретация), вероятно, не должен разделяться между параллельными контекстами выполнения без защиты. Вопрос (открытый)
Сценарии ошибок
Ошибочные ситуации при обращении с ara::per::ReadWriteAccessor проявляются как на этапе компиляции, так и во время выполнения через определенные предусловия и постусловия. Важным статическим предусловием является запрет инстанцирования по умолчанию: поскольку конструктор без параметров удален, любая попытка прямого конструирования приводит к немедленной ошибке компиляции [SWS_PER_00462]. За счет этого предотвращается существование неинициализированных или недействительных объектов аксессоров в системе.
Относительно уровня безопасности исключений класс обеспечивает гарантированную безопасность исключений при освобождении: деструктор определен как noexcept и специфицирован как безопасный к исключениям («exception safe») [SWS_PER_00598]. Это гарантирует, что даже при ошибках во время операций очистки исключения C++ не будут распространяться наружу, благодаря чему обеспечивается безопасная размотка стека.
Критический сценарий ошибки во время выполнения возникает из-за отсутствия потокобезопасности деструктора согласно [SWS_PER_00598]. Если объект уничтожается в то время, когда другой поток все еще выполняет операции чтения или записи, это приводит к неопределенному поведению или несогласованности данных. Поэтому соблюдение связанных с потоками предусловий целиком возлагается на архитектуру вызывающей системы.
Данное руководство по классу основано на спецификации AUTOSAR Adaptive Platform R25-11 для модуля Persistency (per).
UML-диаграмма классов
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал