Ваш вопрос имеет техническое имя: персистентность , относящаяся к сериализация . Изучите библиотеку s11n .
Для этого вы можете использовать базы данных . В частности, реляционные базы данных (они поддерживаются Qt), такие как PostGreSQL ou sqlite . Или нет SQL баз данных, например mongodb или Cassandra или просто GDBM или TokyoCab inet.
Вы можете прочитать черновой отчет Бисмона , который может вас вдохновить. Это постоянная система данных ( Bismon - это программное обеспечение GPLv3 +, компоненты и идеи которого соответствуют вашим проблемам).
См. Также RefPerSys - ранняя работа в процессе в C ++ с Qt. Код GPLv3 и данные на gitlab . Также с постоянством на основе JSON.
Вы наверняка захотите использовать открытые форматы . Если вы определяете свой собственный формат данных (и не хотите использовать существующие форматы, такие как JSON, YAML , XML, H JSON, S-Expr , ASN1 , XDR , CSV , OpenDocument . ..) Обязательно документируйте свой формат данных . Для этой цели полезно использовать EBNF .
Если у вас нет тонны данных, вы можете предпочесть текстовые форматы. Их легче отлаживать. Если на диске возникает проблема, сожмите их (например, с помощью zlib ). Для обработки циклических ссылок и прямых ссылок вам необходимо проанализировать их дважды (за два прохода, как это делает ассемблер ).
Обратите внимание, что при трассировке методов сбора мусора используются методы и алгоритмы, относящиеся к постоянству: для сохранения ваших данных (например, вашей кучи ) используются алгоритмы, аналогичные тем, которые используются для копирования G C. Сложными проблемами являются циклические ссылки и интеллектуальные указатели , с которыми трудно справиться при подсчете ссылок .
Избегайте хранения указателей на диске или в базы данных напрямую, из-за ASLR .