xin*_*aiz 7 c++ reference placement-new language-lawyer c++11
我正在搞乱新的位置,并制作了这段代码:
#include <iostream>
#include <functional>
#include <new>
int main()
{
char memory[sizeof(int)]; //memory to hold type
auto ref = std::ref(*new (memory) int{5}); //allocating int in memory, and make a reference to it
std::cout << ref << std::endl;
new (memory) unsigned{6}; //"overwrite"
std::cout << ref << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
5那么输出6,但它是否定义明确?如果是这样,如果我用作float第二种类型可以吗?
第二个放置new 表达式int重用第一个放置new 表达式( [basic.life]/1.4 ) 创建的对象的存储,并因此结束其生命周期。
由于[basic.life]/8不满足(由于类型差异),引用包装器存储的指针不会指向新对象,而是继续指向生命周期外的int对象。因此,根据[basic.life]/7 ,通过从此类指针获取的左值访问对象具有未定义的行为。
请注意,严格别名在这里无关紧要;该规则明确允许通过“与对象的动态类型相对应的有符号或无符号类型的类型”的泛左值来访问对象。
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |