Boost :: serialization - 如何序列化需要数据分配但没有默认构造函数的数据结构?

时间:2012-12-17 10:40:20

标签: c++ boost

在问题标题中 - 我需要序列化指向每个数据结构的复杂网络,并由可能没有默认构造函数的类表示。这些类通常具有指针向量或对向量。

我认为简单地分配sizeof(SomeClass)的内存是有意义的,然后用序列化例程填充它,但是这会导致与字符串相关的未初始化的内存问题(resize()失败,可能未初始化的字符串对象是不愿意工作)。示例代码如下所示:

friend class boost::serialization::access;

template<class Archive> void save(Archive & ar, const unsigned int version) const
{
        int n;
        ar & vec.size();
        for(int i=0; i<n; i++)
        {
                ar & vec[i];
        }
}

template<class Archive> void load(Archive & ar, const unsigned int version) const
{
        int n;
        ar & n;
        for(int i=0; i<n; i++)
        {
                SomeClass* obj = (SomeClass*)::operator new(sizeof(SomeClass));
                ar & *obj;
                vec.push_back(*obj);
        }
}

1 个答案:

答案 0 :(得分:3)

这将在boost :: serialization文档的以下部分中介绍:

boost::serialization - Non-Default Constructors

基本上您需要编写自己的load_construct_datasave_construct_data

版本