Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调试Boost。序列化地址跟踪_C++_Serialization_Boost_Boost Serialization - Fatal编程技术网

C++ 调试Boost。序列化地址跟踪

C++ 调试Boost。序列化地址跟踪,c++,serialization,boost,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 不幸的是,在一个简单的示例中复制这种行为的所有尝试都失败了,并且原始代码太大,无法发布到这里。因此,

粗略地说,我有一个对象
o
和一个指向该对象的指针
po=&o
,我将其序列化如下:

// Somewhere
ar & o;

// Somewhere else, but after somewhere
ar & po;
序列化
po
时,Boost.Serialization应该发现它已经序列化了
o
,而没有再次序列化
*po
。我遇到了这样一种情况:库无法发现这种情况,而是序列化了两次
o

不幸的是,在一个简单的示例中复制这种行为的所有尝试都失败了,并且原始代码太大,无法发布到这里。因此,我要求的不是问题的解决方案,而是Boost.Serialization中相关代码部分的指针,它跟踪地址并确定指针是否需要“深度”序列化。我希望我可以自己调试

当然,任何关于错误的最佳猜测都是受欢迎的,但我不想让你的水晶球太紧张

顺便说一句,如果相关的话,我会使用
boost::archive::text\u oarchive

假设boost序列化跟踪引用上的实例。这是一个错误的假设

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


类似的情况也适用于多态类的运行时动态类型。

所讨论的代码部分是中的
save\u pointer()
函数


序列化使用两个特征来检查对象是否已经序列化:对象地址和对象类型。地址部分是显而易见的,如果你也考虑一下类型部分,它是有意义的。我的问题是我没有考虑它,只是检查了两个地址是否相同。这确实成立,但由于类型不同,序列化库假定它是两个不同的对象

+1对于水晶球行:)不,
text\u-oarchive
不是很相关,尽管我发现
xml\u-oarchive
很好地理解了一些跟踪引用。是否
BOOST\u-CLASS\u-tracking(Object,BOOST::serialization::track\u-everys)
有帮助(如果只是突出显示冲突的特征)?否。但无论如何,非常感谢你的努力!a) 跟踪在我尝试的所有情况下都有效(即只有一个序列化),例如,如果您执行
ar&o&po或其任何变体。b) 
指针冲突
异常(请参阅)仅在跟踪引用时才有意义。因此,除非你给我看一份文件摘录,明确证明你的观点,否则我认为你的答案是错误的@gTcV我必须同意这种说法。再说一次,目标跟踪是相当棘手的(),所以在我们有一个SSCCE之前,我担心它太水晶球了。我几乎用“类似的东西适用于多态类的运行时动态类型”来回答这个问题,但我无法连接这些点(它们超出了我的视野:)。公布决议的荣誉。