c++ - 调试 Boost.Serialization 地址跟踪

标签 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 中相关代码部分的指针,该代码部分跟踪地址并确定指针是否需要“深度”序列化。我希望我可以自己进行调试。

当然,任何关于错误可能是什么的最佳猜测也是受欢迎的,但我不想让你的 Crystal 球承受太大的压力。 ;-)

顺便说一句,如果相关的话,我会使用 boost::archive::text_oarchive

最佳答案

有问题的代码部分是 basic_oarchive 中的 save_pointer() 函数。

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

关于c++ - 调试 Boost.Serialization 地址跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26712236/

相关文章:

.net - 使用 JSON.Net 从 NetworkStream 反序列化或解析 JSON

c++ - 在 C++ 中的类中声明私有(private)静态变量

java - 如何序列化要由 Spring 的 DataBinder 加载的 javabean?

c++ - 枚举序列化? C++

C++ 更快的字符串解析?

c++ - 我还需要对 algorithm::join 使用 boost 吗?

c++ - 在 C++ 中实现线程的标准做法?

具有函数模板和重载的 C++ 类

c++ - 未命名命名空间优于静态命名空间?

c++ - Boost::ptr_vector 改变元素顺序