与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的文档,如果共享指针已被序列化,则会发生这种情况。通过打印出地址,我可以得出结论,并非如此。
能请你指教吗?