加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 初始化inplace对象的Placement

发布时间:2020-12-16 09:38:08 所属栏目:百科 来源:网络整理
导读:我最近遇到了一个相当有趣的序列化方法,利用未初始化变量的透明度(编译器中的常见未定义行为?)进行“高效”反序列化. 分配存储器并分配预定值.然后使用Placement new来实例化一个结构(例如一个复杂的就地数据结构),将未初始化的变量“初始化”为底层内存的
我最近遇到了一个相当有趣的序列化方法,利用未初始化变量的透明度(编译器中的常见未定义行为?)进行“高效”反序列化.

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

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

class SomeClass {
public:
  SomeClass() {}

  int someInt;
};

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

  int *pSomeClass = new (&dummy) SomeClass();
  cout << pSomeClass->someInt << endl;
}

这将打印出数字42 … neato!

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读