【发布时间】:2014-08-18 06:06:42
【问题描述】:
这是我的情况:我想重载“operator new”,以便将我的对象分配到预定义的内存缓冲区中,而不是在内存中的随机空间中分配我的对象。我希望能够将此缓冲区保存到文件中并在将来加载它,所以我想使用句柄而不是指针。理想情况下,我想要的是让“operator new”返回一个句柄,我可以使用该句柄直接进入对象在其缓冲区中的位置。是否可以在 C++(11) 中做到这一点?如果没有,我最好的选择是什么?
【问题讨论】:
-
为什么不把构建对象的信息存储在文件中呢?我对句柄一无所知,因为这与 C++ 无关,但您仍然可以返回一个普通指针,当您读取文件时将内容复制到缓冲区然后简单地转换它......这确实是一个未定义的行为还有一个非常简单的方法来破解你的程序......
-
因为我希望能够将整个系统一次保存到一个文件中,而不必序列化每个最后一个指针以获取实际上可能是数十万甚至数十万个引用。通过使用句柄(存储对象的数组的索引),我可以在它们发生之前避免无数的序列化错误。
-
如果每个对象都自己序列化并且你有一个反序列化构造函数,那么这不是问题。根据您的定义,您的句柄是指针的偏移量,因此指针可以完成完全相同的工作。
-
@Geoffroy 不,如果对象中有任何虚函数,这仍然是个问题。所需的空间量因 CPU 平台和编译器而异,填充也是如此。如果它在 32 位和 64 位处理器上运行,那就更糟了。您永远不想将对象直接写入文件。
-
@GabeSechan 这就是我谈论存储信息以构造对象的原因。
标签: c++ operator-overloading new-operator