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