Serializzazione in MFC

Questo articolo illustra il meccanismo di serializzazione fornito nella libreria MFC (Microsoft Foundation Class Library) per consentire la persistenza degli oggetti tra le esecuzioni del programma.

La serializzazione è il processo di scrittura o lettura di un oggetto da o verso un supporto di archiviazione permanente, ad esempio un file su disco. La serializzazione è ideale per situazioni in cui si desidera mantenere lo stato dei dati strutturati (ad esempio classi o strutture C++) durante o dopo l'esecuzione di un programma. L'uso degli oggetti di serializzazione forniti da MFC consente di eseguire questa operazione in modo standard e coerente, riducendo l'utente dalla necessità di eseguire operazioni sui file a mano.

MFC fornisce il supporto predefinito per la serializzazione nella classe CObject. Di conseguenza, tutte le classi derivate da CObject possono sfruttare il CObjectprotocollo di serializzazione.

L'idea di base della serializzazione è che un oggetto deve essere in grado di scrivere il relativo stato corrente, in genere indicato dal valore delle variabili membro, nell'archiviazione permanente. Successivamente, l'oggetto può essere ricreato leggendo o deserializzando lo stato dell'oggetto dalla risorsa di archiviazione. La serializzazione gestisce tutti i dettagli dei puntatori agli oggetti e i riferimenti circolari agli oggetti utilizzati durante la serializzazione di un oggetto. Un punto chiave è che l'oggetto stesso è responsabile della lettura e della scrittura del proprio stato. Pertanto, affinché una classe sia serializzabile, deve implementare le operazioni di serializzazione di base. Come illustrato nel gruppo serializzazione di articoli, è facile aggiungere questa funzionalità a una classe.

MFC usa un oggetto della CArchive classe come intermediario tra l'oggetto da serializzare e il supporto di archiviazione. Questo oggetto è sempre associato a un CFile oggetto, da cui ottiene le informazioni necessarie per la serializzazione, incluso il nome del file e se l'operazione richiesta è una lettura o scrittura. L'oggetto che esegue un'operazione di serializzazione può utilizzare l'oggetto CArchive senza considerare la natura del supporto di archiviazione.

Un CArchive oggetto usa operatori di inserimento ed estrazione () di overload (<<>>) per eseguire operazioni di scrittura e lettura. Per altre informazioni, vedere Archiviazione e caricamento di oggetti CObject tramite un archivio nell'articolo Serializzazione: Serializzazione di un oggetto.

Nota

Non confondere la CArchive classe con le classi iostream per utilizzo generico, che sono solo per il testo formattato. La CArchive classe è per oggetti serializzati in formato binario.

Se si vuole, è possibile ignorare la serializzazione MFC per creare un meccanismo personalizzato per l'archiviazione dei dati persistente. Sarà necessario eseguire l'override delle funzioni membro della classe che avviano la serializzazione al comando dell'utente. Vedere la discussione nella Nota tecnica 22 del ID_FILE_OPEN, ID_FILE_SAVE e ID_FILE_SAVE_AS comandi standard.

Gli articoli seguenti illustrano le due attività principali necessarie per la serializzazione:

L'articolo Serializzazione: serializzazione e input/output del database descrive quando la serializzazione è una tecnica di input/output appropriata nelle applicazioni di database.

Vedi anche

Concetti
Argomenti MFC generali
Classe CArchive
Classe CObject
Classe CDocument
Classe CFile