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”,或者用外行人的话说,是“愚蠢”.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |