谷物序列化shared_ptr的问题

时间:2019-03-05 13:53:40

标签: c++ serialization shared-ptr cereal

与Cereal序列化共享指针时,我遇到了一个问题。我有以下课程结构:

class Source
{
    std::string name;

    template<class Archive> void serialize(Archive & archive)
    {
        archive(name);
        std::cout << "SN: " << "(" << m_Name << ")";
    }
};

class Event
{
    std::shared_ptr<Source> source;

    const std::shared_ptr<Source>& getSource() const 
    {
       return source;
    }

    template<class Archive> void serialize(Archive & archive)
    {
        archive(source);
        std::clog << "EN: " << "(" << getSource()->getName() << ")" << "ENP: " << source.get() << std::endl;
}

};

通过运行我的主代码,我得到以下输出:

SN:(l_32)EN:(l_32)ENP:0x7f9f90001450

SN:(l_13)EN:(l_13)ENP:0x7f9f90001b80

SN:(l_4)EN:(l_4)ENP:0x7f9f90002100

SN:(l_58)EN:(l_58)ENP:0x7f9f90002280

SN:(l_27)EN:(l_27)ENP:0x7f9f90002340

SN:(l_81)EN:(l_81)ENP:0x7f9f900028b0

SN:(l_65)EN:(l_65)ENP:0x7f9f90002970

SN:(l_49)EN:(l_49)ENP:0x7f9f90003140

SN:(l_73)EN:(l_73)ENP:0x7f9f90003200

SN:(l_99)EN:(l_99)ENP:0x7f9f900032c0

SN:(l_33)EN:(l_33)ENP:0x7f9f90003380

SN:(l_14)EN:(l_14)ENP:0x7f9f90002af0

EN:(l_5)ENP:0x7f9f90001510

对于事件(l_5)来说,它似乎没有序列化共享指针。根据Cereal的文档,如果共享指针已被序列化,则会发生这种情况。通过打印出地址,我可以得出结论,并非如此。

能请你指教吗?

0 个答案:

没有答案