Permite a leitura e a escrita combinadas de dados de arquivo por meio de uma interface de acesso compartilhada.
GERADO POR IAnão revisadoModelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 6c41c48fc5a7ProcedênciaPerguntas em aberto (3)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão
Permite a leitura e a escrita combinadas de dados de arquivo por meio de uma interface de acesso compartilhada.
A classe ara::per::ReadWriteAccessor combina as interfaces de ReadAccessor e WriteAccessor para permitir a leitura e a escrita de dados de arquivo na AUTOSAR Adaptive Platform por meio de um objeto compartilhado. A instanciação direta por meio do construtor padrão não é permitida, pois este foi explicitamente excluído [SWS_PER_00462]. Ao destruir a instância, o destrutor declarado como noexcept garante total segurança contra exceções, mas é expressamente especificado como não sendo thread-safe, exigindo, portanto, acesso sincronizado [SWS_PER_00598].
Contexto
A classe ara::per::ReadWriteAccessor representa, no módulo per (Persistency) da AUTOSAR Adaptive Platform, a interface central para ler bem como escrever dados de arquivo. Ela reúne as funcionalidades de acesso separado de leitura e de escrita ao combinar os recursos das classes base ReadAccessor e WriteAccessor. A declaração da classe é feita por meio do arquivo de cabeçalho ara/per/read_write_accessor.h[SWS_PER_00462].
Na arquitetura de tipos, ReadWriteAccessor é definida via herança múltipla como subclasse de ReadAccessor bem como de WriteAccessor e marcada com o identificador final. Isso impede derivações posteriores por parte de desenvolvedores de aplicação e garante que a semântica combinada de acesso permaneça inalterada. Como parceiras de interação atuam, consequentemente, as duas classes base especializadas, cujos contratos de interface compartilhados são projetados em uma camada unificada de acesso para arquivos.
Diagrama de contexto: Hierarquia de herança e relação de papéis entre ReadWriteAccessor, ReadAccessor e WriteAccessor. Fontes: [SWS_PER_00462], [SWS_PER_00598]
Ciclo de vida
O ciclo de vida de uma instância de ara::per::ReadWriteAccessor está sujeito a diretrizes estruturais rigorosas. Conforme [SWS_PER_00462], o construtor padrão sem parâmetros foi explicitamente excluído (ReadWriteAccessor() = delete;). Uma criação direta sem contexto ou parâmetros é, portanto, inadmissível. Do ponto de vista arquitetural (interpretação), instâncias desta classe devem ser tipicamente fornecidas por funções de gerenciamento superiores ou mecanismos de criação do subsistema de Persistency, assim que um arquivo for aberto para operação combinada de leitura e escrita. Pergunta Q-9b390ab33102d524 (aberta)
A liberação da instância ocorre por meio do destrutor ~ReadWriteAccessor(), que está declarado como final e noexcept[SWS_PER_00598]. O término do ciclo de vida do objeto requer atenção especial quanto à concorrência: o destrutor é classificado explicitamente na especificação como não thread-safe ("not thread-safe") [SWS_PER_00598]. O software chamador deve, portanto, garantir que, durante a destruição do objeto, não ocorram operações concorrentes de leitura ou escrita na mesma instância. Conforme a interpretação, o destrutor deve ser responsável por fechar descritores de arquivo abertos e limpar estados internos remanescentes durante a saída ordenada do escopo. Pergunta Q-49e2fdfd53789afd (aberta)
Quanto à relação de posse, o objeto reside tipicamente no escopo local do componente usuário ou é gerenciado por meio de estruturas de ponteiros. Como uma modificação e destruição simultâneas não estão protegidas, uma instância (interpretação) provavelmente não deve ser compartilhada desprotegida entre contextos de execução concorrentes. Pergunta (aberta)
Cenários de erro
Situações de erro no manuseio de ara::per::ReadWriteAccessor manifestam-se tanto em tempo de compilação quanto em tempo de execução por meio de pré e pós-condições específicas. Uma pré-condição estática essencial é a proibição da instanciação padrão: como o construtor sem parâmetros foi excluído, qualquer tentativa de construção direta resulta em um erro imediato de compilação [SWS_PER_00462]. Isso impede que existam no sistema objetos acessores não inicializados ou inválidos.
Quanto ao nível de exceção, a classe oferece segurança de exceção garantida durante a desmontagem: o destrutor é definido como noexcept e especificado como seguro contra exceções ("exception safe") [SWS_PER_00598]. Isso garante que, mesmo diante de erros durante os trabalhos de limpeza, nenhuma exceção C++ seja propagada para o exterior, assegurando assim um stack unwinding seguro.
Um cenário crítico de erro em tempo de execução resulta da ausência de thread safety do destrutor de acordo com [SWS_PER_00598]. Se o objeto for destruído enquanto outra thread ainda estiver executando operações de leitura ou escrita, isso causará comportamento indefinido ou inconsistências de dados. O cumprimento das pré-condições relativas a threads cabe, portanto, integralmente ao projeto do sistema chamador.
Este guia de classe baseia-se na especificação AUTOSAR Adaptive Platform R25-11 para o módulo Persistency (per).
Diagrama de classes UML
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Original em alemão