Placement new用于初始化inplace对象

Mai*_*igo 3 c++ initialization undefined new-operator placement

我最近遇到了一个相当有趣的序列化方法,利用未初始化变量的透明度(编译器中的常见未定义行为?)进行"高效"反序列化.

分配存储器并分配预定值.然后使用Placement new来实例化一个结构(例如一个复杂的就地数据结构),将未初始化的变量"初始化"为底层内存的值.(见下面的代码)

除了相当危险,可能不是一个非常令人愉快的编码约定...我只是想知道是否有人遇到过这种方法或更重要的是 - 它叫什么?

class SomeClass {
public:
  SomeClass() {}

  int someInt;
};

int main(...) {
  int dummy = 42;

  int *pSomeClass = new (&dummy) SomeClass();
  cout << pSomeClass->someInt << endl;
}
Run Code Online (Sandbox Code Playgroud)

这将打印出数字42 ... neato!

Lig*_*ica 5

它被称为"依靠UB",或者用外行人的话说,是"愚蠢".