考虑
#include <iostream>
struct Foo
{
int* n;
Foo(){n = new int{};}
~Foo(){delete n;}
int& get()
{
int* m = n;
return *m;
}
};
int main()
{
Foo f;
std::cout << f.get();
}
Run Code Online (Sandbox Code Playgroud)
这是管理指针的类的简化版本,并具有返回对取消引用的指针的引用的方法。
这是定义的行为吗?
这是定义的行为吗?
是的,给定的程序格式良好。您将返回一个非常量左值引用,该引用引用指针n和指向的动态分配的整数m。调用后整数对象仍然存在f.get()。也就是说,它不是函数局部变量。
另请注意,仅返回对潜在局部变量的引用本身并不是未定义的行为。只是,如果您要将返回的引用(又名悬空引用)用于不再存在的局部变量,那么我们将得到 UB。
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |