小编Mai*_*igo的帖子

Placement new用于初始化inplace对象

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

分配存储器并分配预定值.然后使用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!

c++ initialization undefined new-operator placement

3
推荐指数
1
解决办法
614
查看次数

标签 统计

c++ ×1

initialization ×1

new-operator ×1

placement ×1

undefined ×1