template <typename T> class UniqueHandle final {...};
Handle to a ReadAccessor or ReadWriteAccessor. A UniqueHandle is returned by the functions OpenFileReadOnly(), OpenFileWriteOnly(), and OpenFileReadWrite().
Управляет монопольным перемещаемым доступом к объектам файлового аксессора с RAII-семантикой.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 7be811cdf7d8ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Управляет монопольным перемещаемым доступом к объектам файлового аксессора с RAII-семантикой.
Шаблонный класс ara::per::UniqueHandle управляет монопольным владением объектами файлового аксессора персистентности AUTOSAR в рамках строгой семантики только перемещения (move-only). После получения через функции файлового доступа экземпляр перед любым использованием обязательно должен быть проверен на действительность с помощью operator bool()[SWS_PER_00371]. Вызов других операторов для пустого или переданного дескриптора приводит к неопределенному поведению [SWS_PER_00399]. Все операции объявлены как noexcept, при этом операции чтения являются потокобезопасными, а модифицирующие операции — нет.
Контекст
Шаблонный класс ara::per::UniqueHandle служит типобезопасным дескриптором доступа к объектам ресурсов персистентности AUTOSAR Adaptive, а именно к ReadAccessor или ReadWriteAccessor. Он предоставляется в качестве возвращаемого значения функций OpenFileReadOnly(), OpenFileWriteOnly() и OpenFileReadWrite() и инкапсулирует монопольное владение открытым интерфейсом файлового доступа.
Жизненный цикл
Класс реализует строгую семантику только перемещения (Unique Ownership). Чтобы исключить случайное дублирование доступа или разделяемое владение, как конструктор копирования [SWS_PER_00373], так и оператор присваивания копированием [SWS_PER_00374] определены как удаленные (delete). Права владения могут передаваться исключительно путем перемещения: при вызове конструктора перемещения [SWS_PER_00371] или присваивания перемещением [SWS_PER_00372] переданный исходный объект инвалидируется и больше не может использоваться.
Дескриптор UniqueHandle в любой момент времени находится либо в действительном состоянии (представляет валидный объект параметризованного класса), либо в пустом или инвалидированном состоянии, как после передачи перемещением [SWS_PER_00399]. При завершении области видимости выполняется деструктор [SWS_PER_00569]. Предположительно, уничтожение действительного дескриптора автоматически закрывает или очищает инкапсулированный ресурс доступа. Вопрос Q-e7f12aa0d7c5548d (открытый)
Типичное использование UniqueHandle следует установленной последовательности шагов:
Получение дескриптора: приложение принимает дескриптор как результат вызова файлового доступа, такого как OpenFileReadOnly(), OpenFileWriteOnly() или OpenFileReadWrite().
Проверка состояния: перед любой дальнейшей операцией статус экземпляра должен быть в обязательном порядке верифицирован с помощью operator bool()[SWS_PER_00371], [SWS_PER_00372]. Оператор возвращает true при наличии действительного объекта и false, если дескриптор пуст [SWS_PER_00399].
Доступ к инкапсулированному объекту: при действительном статусе доступ к методам и данным целевого объекта осуществляется через операторы стрелки operator-> (неконстантный [SWS_PER_00360] или константный [SWS_PER_00361]) или путем разыменования с помощью operator* (неконстантный [SWS_PER_00400] или константный [SWS_PER_00401]).
Передача владения или уничтожение: дескриптор может быть при необходимости передан другому компоненту с помощью std::move[SWS_PER_00371] либо автоматически уничтожается в конце своего жизненного цикла [SWS_PER_00569].
Сценарии ошибок
Центральным сценарием сбоя является доступ к пустому или переданному дескриптору: использование любых операторов, кроме operator bool(), для пустого дескриптора согласно спецификации приводит к неопределенному поведению (Undefined Behavior) [SWS_PER_00399]. Поэтому перед любым разыменованием строго предписана проверка [SWS_PER_00371], [SWS_PER_00372].
В отношении безопасности относительно исключений и параллелизма действуют следующие детали спецификации:
Потокобезопасность: операторы чтения operator*[SWS_PER_00400], [SWS_PER_00401], operator->[SWS_PER_00360], [SWS_PER_00361], а также operator bool()[SWS_PER_00399] являются потокобезопасными (thread-safe). Напротив, модифицирующие действия, такие как присваивание перемещением [SWS_PER_00372] и уничтожение через деструктор [SWS_PER_00569], явно не являются потокобезопасными и требуют внешней синхронизации при параллельном доступе.
Данное руководство было сгенерировано ИИ на основе спецификации AUTOSAR R25-11.
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-low· 2026-10-13 · Немецкий оригинал