Serialização em MFC

Este artigo explica o mecanismo de serialização fornecido na biblioteca Microsoft Foundation Class (MMFC) para permitir que os objetos persistam entre as execuções do programa.

A serialização é o processo de leitura ou gravação de ou em um meio de armazenamento persistente, como um arquivo de disco. A serialização é ideal para situações em que se deseja manter o estado dos dados estruturados (como classes ou estruturas C++) durante ou após a execução de um programa. O uso dos objetos de serialização fornecidos pelo MFC permite que isso ocorra de maneira padrão e consistente, aliviando o usuário da necessidade de executar operações de arquivo manualmente.

O MFC fornece suporte interno à serialização na classe CObject. Assim, todas as classes derivadas de CObject podem tirar proveito do protocolo de serialização CObject.

A ideia básica de persistência é que um objeto deve ser capaz de gravar seu estado atual, geralmente indicado pelos valores de suas variáveis de membro, no armazenamento persistente. Posteriormente, o objeto pode ser recriado lendo ou "desserializando" o estado do objeto no armazenamento persistente. A serialização manipula todos os detalhes de ponteiros de objeto e referências circulares a objetos que são usados quando você serializa um objeto. É importante ter em mente que o próprio objeto é responsável por ler e gravar o próprio estado. Portanto, para que uma classe seja serializável, ela deve implementar as operações básicas de serialização. Conforme mostrado no grupo de artigos sobre serialização, é fácil adicionar essa funcionalidade a uma classe.

O MFC usa um objeto da classe CArchive como um intermediário entre o objeto a ser serializado e o meio de armazenamento. Esse objeto sempre está associado a um objeto CFile, do qual obtém as informações necessárias para serialização, incluindo o nome do arquivo e se a operação solicitada é uma leitura ou gravação. O objeto que executa uma operação de serialização pode usar o objeto CArchive sem considerar a natureza do meio de armazenamento.

Um objeto CArchive usa operadores de inserção (<<) e extração (>>) sobrecarregados para executar operações de gravação e leitura. Para obter mais informações, consulte Armazenar e carregar CObjects por meio de um Arquivo no artigo Serialização: serializar um objeto.

Observação

Não confunda a classe CArchive com classes iostream de uso geral, que são apenas para texto formatado. A classe CArchive se destina a objetos serializados em formato binário.

Se desejar, você pode ignorar a serialização do MFC e criar seu próprio mecanismo para armazenamento de dados persistente. Você precisará substituir as funções membro da classe que iniciam a serialização no comando do usuário. Consulte a discussão na Nota Técnica 22 dos comandos padrão ID_FILE_OPEN, ID_FILE_SAVE e ID_FILE_SAVE_AS.

Os artigos a seguir abordam as duas principais tarefas necessárias para a serialização:

O artigo Serialização: serialização versus entrada/saída do banco de dados descreve quando a serialização é uma técnica de entrada/saída apropriada em aplicativos de banco de dados.

Confira também

Conceitos
Tópicos gerais do MFC
Classe CArchive
Classe CObject
Classe CDocument
Classe CFile