我最近遇到了一种相当有趣的序列化方法,它利用未初始化变量的透明度(编译器之间常见的未定义行为?)来“高效”反序列化。
内存被分配和分配一个预定的值。然后使用放置 new 来实例化一个结构(例如复杂的就地数据结构),将未初始化的变量“初始化”为底层内存的值。(见下面的代码)
除了相当冒险并且可能不是一个非常令人满意的编码约定之外......我只是想知道是否有人遇到过这种方法或更重要的是 - 它叫什么?
class SomeClass {
public:
SomeClass() {}
int someInt;
};
int main(...) {
int dummy = 42;
int *pSomeClass = new (&dummy) SomeClass();
cout << pSomeClass->someInt << endl;
}
这将打印出数字 42...neato!