Rus*_*lan 9 c++ initialization reference undefined-behavior
考虑以下代码:
int& x=*new int;
Run Code Online (Sandbox Code Playgroud)
赋值的RHS是否实际取消引用新创建的指针,由于读取未初始化的变量而导致UB?或者这可以合法地用于以后分配像x=5;
?
据我所知,你所做的一切都没有涉及未定义的行为.
但是,它会立即产生内存泄漏的风险.它可以快速解决(因为它&x
会解析到泄漏的内存的地址,因此可以删除)但是如果你要离开作用域,你将无法检索该指针.
编辑:到了这一点,如果你要写
int& x=*new int;
x = 5;
std::cout << x << std::endl;
std::cin >> x;
std::cout << x << std::endl;
Run Code Online (Sandbox Code Playgroud)
代码的行为就像你只是简单地声明x一样int x;
,除了指针在程序退出范围后也会悬空.
如果您在为其分配值之前尝试读取未初始化的变量,则会实现未定义的行为,但如果x
分配了堆栈,则不会是不真实的.
归档时间: |
|
查看次数: |
121 次 |
最近记录: |