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

Serialization 如何保存指针中存储的实际地址,serialization,boost,boost-serialization,Serialization,Boost,Boost Serialization,是否可以保存指针中存储的实际地址而不是指针指向的对象 我的意思是,boost::serialization自动序列化a引用的对象,而不是对象的地址,但在我的例子中,有很多对同一个对象的引用,我不想一次又一次地序列化它们,所以我只需要保存此类指针的地址。这不起作用。一个对象在运行时的内存位置会随着程序的执行而变化 可以使用某种对象目录或ID系统,例如,如果对象具有内置唯一ID。如果仅将指针地址用作对象ID,指针地址甚至可能适用于此 然后(如果您覆盖了正常的序列化和反序列化),您可以将每个对象写入一

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


我的意思是,
boost::serialization
自动序列化a引用的对象,而不是对象的地址,但在我的例子中,有很多对同一个对象的引用,我不想一次又一次地序列化它们,所以我只需要保存此类指针的地址。

这不起作用。一个对象在运行时的内存位置会随着程序的执行而变化

可以使用某种对象目录或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::archive::text\u oarchive oa(ofs);
....
无符号长整型foo=(无符号长整型)&my_object;//可能需要降低警告级别,具体取决于编译器

oa那是行不通的。一个对象在运行时的内存位置会随着程序的执行而变化

可以使用某种对象目录或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::archive::text\u oarchive oa(ofs);
....
无符号长整型foo=(无符号长整型)&my_object;//可能需要降低警告级别,具体取决于编译器

oa“一个对象在运行时的内存位置会随着程序的执行而变化”——是的,我完全知道这一点。我要用这个地址作为一个唯一的身份证,因为我的问题还没有解决。如何序列化指针的地址?因此,是的,我可以反序列化指向0x12345的指针,而0x12345在程序的当前状态下不可用。它只是一个唯一的ID,稍后我会更改它指向的位置。您可以自己编写它,或者分配它,然后序列化它。添加了unsigned int 64=&foo.Sample,并引用了boost在某些情况下是如何做到这一点的“一个对象在运行时的内存位置会随着程序的执行而变化”——是的,我完全知道这一点。我要用这个地址作为一个唯一的身份证,因为我的问题还没有解决。如何序列化指针的地址?因此,是的,我可以反序列化指向0x12345的指针,而0x12345在程序的当前状态下不可用。它只是一个唯一的ID,稍后我会更改它指向的位置。您可以自己编写它,或者分配它,然后序列化它。添加了unsigned int 64=&foo.Sample,并引用boost在某些情况下是如何将其转换为整数的?而且,正如人们指出的,你正在做一些事情。。。错。如果你想要一个唯一的ID,可以。生成一个。但将地址存储在文件中至少会产生误导。是否将其转换为整数?而且,正如人们指出的,你正在做一些事情。。。错。如果你想要一个唯一的ID,可以。生成一个。但将地址存储在文件中至少会产生误导。