Вам не нужно создавать конструктор по умолчанию только для сериализации.Вместо этого вы можете выполнить ускоренное сохранение / загрузку данных, необходимых для конструктора не по умолчанию, и использовать его для создания новых объектов при загрузке.
Таким образом, все, что ваши конструкторы делают для обеспечения достоверности членов данных, может такжепроисходит во время сериализации, и библиотеке сериализации никогда не приходится напрямую манипулировать элементами данных ваших объектов.Это должно предотвратить стирание данных.
Например, если ваш класс может быть создан с использованием name
и size
, вы можете перегрузить функции следующим образом:
template <class Archive>
inline void save_construct_data(Archive & ar, const my_class * t, const unsigned int) {
ar << my_class->name();
ar << my_class->size();
}
template<class Archive>
inline void load_construct_data(Archive & ar, my_class * t, const unsigned int) {
std::string name;
int size;
ar >> name;
ar >> size;
::new(t)my_class(name, size); // placement 'new' using your regular constructor
}
Проверкадокументы здесь .