【发布时间】:2012-10-25 11:25:36
【问题描述】:
这与找到的here 的问题标题完全相同——我还想将内存地址存储在变量中——或者更确切地说,将void* 存储在变量中。但是,我宁愿将其存储为某种形式的 int 而不是 string,因为我想在之后将其转换回指针。
这是因为它是一个类的成员,然后我想用 boost serialize 进行序列化,如果我确实使用了void*,boost serialize 可能会尝试存储指针指向的内容,这不会对我来说不是很明智。
对于 32 位和 64 位 gcc 和 MSVC,我需要它,所以基本上我想知道在同一平台上是否有一个与指针大小相同的内置整数类型。或者,我想我需要IFDEF我自己的类型?
【问题讨论】:
-
如果是为了序列化,存储指针对我来说似乎根本不明智。只是好奇,它指向什么?
-
一个复杂的环境——在序列化时,它是一个指向所述环境的完整指针。反序列化时,它仅用作识别两个对象是否引用同一环境的标识符。除此之外,序列化指针有很多理由,但通常只针对指向的对象——在这种情况下的 boost 序列化中有很多例子,但只有一个是共享指针,指向的对象只需要序列化一次。
-
我知道这个技巧。这是不值得的。不要将序列化的 int_ptr 转回指针。您的代码最终会取消引用,而不是指针。仅将真正的工作指针存储在指针变量中。如果您必须创建一个用 int_ptr 代替指针的并行结构,但此时您想要创建真正的结构,则需要指向一些实际数据。我明白了,您的解决方案似乎很简单……但事实并非如此。
-
这实际上不是我们在这里使用的技术。我们实际上只将它转换回输出它,非常像
std::cout << reinterpret_cast<void*>(xxx) << ...
标签: c++ 32bit-64bit void-pointers