Debug Boost.Serialization地址跟踪

时间:2014-11-03 10:27:44

标签: c++ serialization boost boost-serialization

粗略地说,我有一个对象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

2 个答案:

答案 0 :(得分:2)

相关代码部分是basic_oarchive中的save_pointer()函数。

Boost.Serialization使用两个特性来检查对象是否已被序列化:对象地址和对象类型。地址部分很明显,如果你考虑类型部分也是有意义的。我的问题是我做了考虑它,只检查了两个地址是否相同。这确实是正确的,但由于类型不同,序列化库假设它是两个不同的对象。

答案 1 :(得分:0)

您所做的假设是Boost Serialization跟踪引用上的实例。这是一个错误的假设。

<击>

AFAIR它跟踪指针(和智能指针)上的实例。

类似的东西适用于运行时动态类型的多态类。