如何提升::序列化指针和引用?

时间:2019-05-26 10:23:35

标签: c++ serialization boost

我需要使用以下字段序列化一个类:int,指向int的指针,数组,类对象,指向类对象的指针,指向类对象的指针,指向具有虚拟父对象的类对象的指针。

我试图实现它。我设法为整数和数组。但是我不能处理指针和引用

class B() {};

class Person
{
 public:
int age; // work
    int *ageptr = &age; // not work
std::vector<int> favoriteNumbers; //work

    B b; // not work
    B *bptr = &b; // not work
    B &bref = b; // not work

Person();
~Person();

private:
    friend class boost::serialization::access;
    template <class Archive>
    void serialize(Archive &ar, const unsigned int version) {
        ar &BOOST_SERIALIZATION_NVP(age);
        ar &BOOST_SERIALIZATION_NVP(ageptr); // error
        ar &BOOST_SERIALIZATION_NVP(b); // error
        ar &BOOST_SERIALIZATION_NVP(bptr); // error
        ar &BOOST_SERIALIZATION_NVP(bref); // error
        ar &BOOST_SERIALIZATION_NVP(favoriteNumbers);
    }
};

1 个答案:

答案 0 :(得分:0)

在您的特定情况下,由于引用和指针引用成员变量,因此不需要对其进行序列化/反序列化。构造函数已经将这些成员设置为正确的值。

关于序列化指针,请阅读serialization tutorial的“指针”部分。

但是,您通常不能反序列化引用,因为它们是其他对象的别名,并且不能将它们重新分配为引用另一个对象。同样,获取引用的地址和sizeof会返回被引用对象的地址和地址。我也recommend against using reference members