首页 >后端开发 >C++ >何时必须将 Placement-New 与'reinterpret_cast”一起使用来创建简单的默认可构造对象?

何时必须将 Placement-New 与'reinterpret_cast”一起使用来创建简单的默认可构造对象?

Susan Sarandon
Susan Sarandon原创
2024-12-06 16:14:23393浏览

When Must Placement-New Be Used with `reinterpret_cast` to Create Trivially Default-Constructible Objects?

Reinterpret_cast 和创建普通的默认可构造对象

cppreference 用于声明reinterpret_cast 可用于创建普通的默认可构造对象在适当对齐的存储上。然而,此声明已被更正,指出在这种情况下需要 place-new 来正式引入对象并避免未定义的行为。

对象生命周期何时开始?

考虑到此更正,很明显,在提供的代码中不存在 X 对象。因此,任何访问其成员的尝试(例如,reinterpret_cast>(buffer)->x = 42;)都会导致未定义的行为。

alignas() 的作用

alignas() 说明符确保存储适当对齐以容纳 X。 它不会创建X对象。如果alignas()声明和reinterpret_cast之间存在分支,它不会改变不存在X对象的事实。

C 标准的变化

此行为的解释在 C 之间保持一致 11和C 1z。这两个标准都不支持通过reinterpret_cast 创建没有显式构造的对象的概念。

以上是何时必须将 Placement-New 与'reinterpret_cast”一起使用来创建简单的默认可构造对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn