粗略地说,我有一个对象o和一个指向该对象po = &o的指针,我将其序列化如下:
// Somewhere
ar & o;
// Somewhere else, but after somewhere
ar & po;在序列化po时,Boost.Serialization应该发现它已经序列化了o,而不是再次序列化*po。我遇到这样的情况:库无法发现这种情况,而是序列化了两次o。
不幸的是,在一个简单的例子中,所有复制这种行为的尝试都失败了,原始代码太大了,无法在这里发布。因此,我不需要解决这个问题,而是请求一个指向Boost.Serialization中相关代码部分的指针,该部分跟踪地址,并确定指针是否需要“深度”序列化。我希望我能自己做调试。
当然,任何关于错误可能是什么的最好的猜测也是受欢迎的,但是我不想让你的水晶球太紧张。;-)
顺便说一句,如果相关的话,我使用boost::archive::text_oarchive。
发布于 2014-11-03 14:02:11
所讨论的代码部分是save_pointer()函数在O档案中。
Boost.Serialization使用两个特性来检查对象是否已经序列化:对象地址和对象类型。地址部分是显而易见的,如果您也考虑到类型部分是有意义的。我的问题是,我没有想过,只检查了这两个地址是否相同。这确实是正确的,但是由于类型不同,序列化库假设它是两个不同的对象。
https://stackoverflow.com/questions/26712236
复制相似问题