gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:12 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com