0

谁能告诉我这是否安全且已定义:


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 中按预期编译和运行,但这并不意味着它会在下一个版本中,所以我试图找到一个明确的答案。

4

2 回答 2

1

是的,没关系。

返回的引用是临时的,持续到包含函数调用的语句结束。它在其生命周期内用于设置refp指向其目标,rc.i. 之后不需要取消引用指针。

唯一的危险是对象可能被销毁,从而使指针悬空:

int* refp;

{
    RefClass rc(10);
    refp = &rc.GetRef();
} // rc is destroyed here

*refp = 20; // BOOM!!!
于 2013-10-08T15:32:50.530 回答
1

是的,这没关系。在以下情况下您会遇到问题:

int* refp;

{
    RefClass rc(10);
    refp = &rc.GetRef();
}

*refp = 20;
于 2013-10-08T15:30:12.340 回答