谁能告诉我这是否安全并已定义:
class RefClass
{
public:
RefClass(int i) { this->i = i; }
int& GetRef() { return i; }
private:
int i;
};
RefClass rc(10);
int* refp;
{
refp = &rc.GetRef();
}
*refp = 20;
具体来说,我关心的是嵌套范围中返回的引用的生存期,以及是否可以在该范围中对其进行引用,然后在该范围分解后作为左值取消引用。
该代码可以按预期在VS2012中编译并运行,但这并不意味着它将在下一版本中使用,因此我试图找到一个明确的答案。
最佳答案
是的,没关系。
返回的引用是临时的,持续到包含函数调用的语句结束。它在生命周期内用于设置refp
指向其目标rc.i
。在那之后不需要取消引用指针。
唯一的危险是,如果对象可能被破坏,则使指针悬空:
int* refp;
{
RefClass rc(10);
refp = &rc.GetRef();
} // rc is destroyed here
*refp = 20; // BOOM!!!