template <typename T> class UniqueHandle final {...};
Handle to a ReadAccessor or ReadWriteAccessor. A UniqueHandle is returned by the functions OpenFileReadOnly(), OpenFileWriteOnly(), and OpenFileReadWrite().
Gestiona el acceso exclusivo y transferible por movimiento a objetos de acceso a archivos con semántica RAII.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 7be811cdf7d8ProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Gestiona el acceso exclusivo y transferible por movimiento a objetos de acceso a archivos con semántica RAII.
La plantilla de clase ara::per::UniqueHandle gestiona la propiedad exclusiva de objetos de acceso a archivos de la persistencia de AUTOSAR en el marco de una estricta semántica de solo movimiento (move-only). Tras su obtención mediante funciones de acceso a archivos, es obligatorio comprobar la validez de la instancia mediante operator bool() antes de cualquier uso [SWS_PER_00371]. La llamada a otros operadores sobre un handle vacío o transferido conduce a un comportamiento indefinido [SWS_PER_00399]. Todas las operaciones están declaradas como noexcept, siendo los accesos de lectura seguros para subprocesos, mientras que las operaciones modificadoras no lo son.
Contexto
La plantilla de clase ara::per::UniqueHandle sirve como handle de acceso con seguridad de tipos a objetos de recursos de la persistencia de AUTOSAR Adaptive, a saber ReadAccessor o ReadWriteAccessor. Se proporciona como valor de retorno de las funciones OpenFileReadOnly(), OpenFileWriteOnly() y OpenFileReadWrite(), y encapsula la propiedad exclusiva de la interfaz de acceso a archivos abierta.
Ciclo de vida
La clase implementa una estricta semántica de solo movimiento (Unique Ownership). Para impedir duplicaciones accidentales del acceso o una propiedad compartida, tanto el constructor de copia [SWS_PER_00373] como el operador de asignación por copia [SWS_PER_00374] están definidos como eliminados (delete). Los derechos de propiedad solo pueden transferirse mediante movimiento: al invocar el constructor de movimiento [SWS_PER_00371] o la asignación por movimiento [SWS_PER_00372], el objeto de origen transferido se invalida y no debe utilizarse a partir de entonces.
Un UniqueHandle se encuentra en todo momento o bien en un estado válido (representa un objeto válido de la clase parametrizada) o bien en un estado vacío o invalidado, como el que se presenta tras una transferencia de movimiento [SWS_PER_00399]. Al finalizar el ámbito de validez, se ejecuta el destructor [SWS_PER_00569]. Presumiblemente, la destrucción de un handle válido cierra o limpia automáticamente el recurso de acceso encapsulado. Pregunta Q-e7f12aa0d7c5548d (abierta)
El uso típico de UniqueHandle sigue una secuencia de pasos definida:
Adquisición del handle: la aplicación recibe el handle como resultado de una llamada de acceso a archivos como OpenFileReadOnly(), OpenFileWriteOnly() o OpenFileReadWrite().
Comprobación de estado: antes de cualquier otra operación, es obligatorio verificar el estado de la instancia mediante operator bool()[SWS_PER_00371], [SWS_PER_00372]. El operador devuelve true si existe un objeto válido y false cuando el handle está vacío [SWS_PER_00399].
Acceso al objeto encapsulado: en caso de estado válido, se accede a los métodos y datos del destino a través de los operadores de flecha operator-> (no constante [SWS_PER_00360] o constante [SWS_PER_00361]) o mediante desreferenciación con operator* (no constante [SWS_PER_00400] o constante [SWS_PER_00401]).
Transferencia de propiedad o destrucción: el handle puede transferirse según sea necesario mediante std::move a otro componente [SWS_PER_00371] o se destruye automáticamente al final de su vida útil [SWS_PER_00569].
Escenarios de error
Un escenario de error fundamental es el acceso a un handle vacío o transferido: el uso de operadores distintos de operator bool() en un handle vacío provoca, según la especificación, un comportamiento indefinido (Undefined Behavior) [SWS_PER_00399]. Por lo tanto, antes de cualquier desreferenciación es obligatorio realizar una comprobación [SWS_PER_00371], [SWS_PER_00372].
En cuanto a la seguridad frente a excepciones y la concurrencia, se aplican los siguientes detalles de especificación:
Seguridad de subprocesos: los operadores de lectura operator*[SWS_PER_00400], [SWS_PER_00401], operator->[SWS_PER_00360], [SWS_PER_00361], así como operator bool()[SWS_PER_00399], son seguros para subprocesos (thread-safe). En cambio, las acciones de modificación como la asignación por movimiento [SWS_PER_00372] y la destrucción a través del destructor [SWS_PER_00569] son explícitamente no seguras para subprocesos y requieren sincronización externa en caso de acceso concurrente.
Esta guía fue generada por una IA sobre la base de la especificación 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 · Original en alemán