如何保存存储在指针中的实际地址

时间:2017-06-07 02:19:29

标签: serialization boost boost-serialization

是否可以保存存储在指针中的实际地址而不是它指向的对象?

我的意思是,boost::serialization自动序列化由a引用的对象而不是对象的地址,但在我的情况下,有很多对同一对象的引用,我不想将它们全部序列化而且,我需要保存这样的指针的地址。

1 个答案:

答案 0 :(得分:2)

那不行。运行时对象的内存位置将从程序执行到下一个程序执行不同。

某种对象目录或ID系统会起作用,例如,如果某个对象具有内置的唯一ID。如果将其用作对象ID,指针地址甚至可能适用于此。

然后(如果覆盖正常的序列化和反序列化),您可以编写每个对象一次,在第一次引用它们时将它们读出并将位置存储到地图中,然后如果再次反序列化相同的ID,则使用地图查找它的指针。

除非您对单一类型的对象进行大量复制,否则这可能不值得。

boost::archive::text_oarchive oa(ofs);
....
unsigned long long int foo = (unsigned long long int) &my_object;  // might need to lower warning level depending on compiler
oa << foo;

你应该确保提升还没有为你做这件事。关于序列化的boost.org教程意味着它只会将指针引用的对象写出一次:http://www.boost.org/doc/libs/1_64_0/libs/serialization/doc/tutorial.html#pointers

“如果同一指针被多次序列化,则只有一个实例被添加到存档中。当读回时,不会读回任何数据。唯一的操作是将第二个指针设置为等于第一“。