template <typename T> class UniqueHandle final {...};
Handle to a ReadAccessor or ReadWriteAccessor. A UniqueHandle is returned by the functions OpenFileReadOnly(), OpenFileWriteOnly(), and OpenFileReadWrite().
Gerencia o acesso exclusivo e móvel a objetos acessadores de arquivos com semântica RAII.
GERADO POR IAnão revisadoModelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 7be811cdf7d8ProcedênciaPerguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão
Gerencia o acesso exclusivo e móvel a objetos acessadores de arquivos com semântica RAII.
O modelo de classe ara::per::UniqueHandle gerencia a posse exclusiva de objetos acessadores de arquivos da persistência do AUTOSAR no âmbito de uma semântica estrita de apenas movimentação (move-only). Após o recebimento por meio de funções de acesso a arquivos, a instância deve obrigatoriamente ser verificada quanto à validade por meio de operator bool() antes de qualquer utilização [SWS_PER_00371]. Uma chamada de outros operadores em um identificador vazio ou transferido leva a comportamento indefinido [SWS_PER_00399]. Todas as operações são declaradas como noexcept, sendo que os acessos de leitura são seguros para threads, enquanto operações modificadoras não o são.
Contexto
O modelo de classe ara::per::UniqueHandle serve como um identificador de acesso com segurança de tipo a objetos de recursos da persistência do AUTOSAR Adaptive, nomeadamente ReadAccessor ou ReadWriteAccessor. Ele é fornecido como valor de retorno das funções OpenFileReadOnly(), OpenFileWriteOnly() bem como OpenFileReadWrite() e encapsula a posse exclusiva da interface de acesso a arquivos aberta.
Ciclo de vida
A classe implementa uma semântica estrita de apenas movimentação (Unique Ownership). Para evitar duplicações acidentais do acesso ou posse compartilhada, tanto o construtor de cópia [SWS_PER_00373] quanto o operador de atribuição por cópia [SWS_PER_00374] são definidos como excluídos (delete). Os direitos de propriedade só podem ser transferidos por movimentação: ao chamar o construtor de movimentação [SWS_PER_00371] ou a atribuição por movimentação [SWS_PER_00372], o objeto de origem transmitido é invalidado e não deve mais ser utilizado posteriormente.
Um UniqueHandle encontra-se a qualquer momento ou em um estado válido (ele representa um objeto válido da classe parametrizada) ou em um estado vazio ou invalidado, tal como se apresenta após uma transferência por movimentação [SWS_PER_00399]. Ao término do escopo de validade, o destrutor [SWS_PER_00569] é executado. Presumivelmente, a destruição de um identificador válido fecha ou limpa o recurso de acesso encapsulado de forma automática. Pergunta Q-e7f12aa0d7c5548d (aberta)
O uso típico de UniqueHandle segue uma sequência definida de etapas:
Obtenção do identificador: A aplicação recebe o identificador como resultado de uma chamada de acesso a arquivo, como OpenFileReadOnly(), OpenFileWriteOnly() ou OpenFileReadWrite().
Verificação de estado: Antes de qualquer operação adicional, o status da instância deve obrigatoriamente ser verificado por meio de operator bool()[SWS_PER_00371], [SWS_PER_00372]. O operador retorna true caso um objeto válido esteja presente, e false quando o identificador estiver vazio [SWS_PER_00399].
Acesso ao objeto encapsulado: Em caso de status válido, os métodos e dados do destino são acessados por meio dos operadores de seta operator-> (não constante [SWS_PER_00360] ou constante [SWS_PER_00361]) ou por meio de desreferenciação com operator* (não constante [SWS_PER_00400] ou constante [SWS_PER_00401]).
Transferência de posse ou destruição: O identificador pode, se necessário, ser transferido para outro componente via std::move[SWS_PER_00371] ou é destruído automaticamente ao final do tempo de vida [SWS_PER_00569].
Cenários de erro
Um cenário central de falha é o acesso a um identificador vazio ou transferido: a utilização de outros operadores além de operator bool() em um identificador vazio leva, de acordo com a especificação, a comportamento indefinido (Undefined Behavior) [SWS_PER_00399]. Portanto, antes de qualquer desreferenciação, uma verificação é obrigatoriamente prescrita [SWS_PER_00371], [SWS_PER_00372].
No que diz respeito à segurança contra exceções e concorrência, aplicam-se os seguintes detalhes de especificação:
Segurança de thread: Os operadores de leitura operator*[SWS_PER_00400], [SWS_PER_00401], operator->[SWS_PER_00360], [SWS_PER_00361] bem como operator bool()[SWS_PER_00399] são seguros para threads (thread-safe). Em contrapartida, ações modificadoras como a atribuição por movimentação [SWS_PER_00372] e a destruição por meio do destrutor [SWS_PER_00569] explicitamente não são seguras para threads e necessitam de sincronização externa em caso de acesso concorrente.
Este guia foi gerado por uma IA com base na especificação 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 em alemão