在C ++中,通过引用扩展范围是否安全?

时间:2008-11-02 10:00:29

标签: c++ reference scope

在C ++中,通过引用扩展范围是否安全?

在代码中,我的意思是:

MyCLass& function badIdea()
{
    MyClass obj1;
    ...
    return obj1;
}

3 个答案:

答案 0 :(得分:20)

通过引用扩展范围是不安全的。当obj1超出范围时,C ++中的对象不被引用计数它将被删除,引用badIdea()的结果只会让你陷入麻烦

答案 1 :(得分:14)

使用引用扩展范围的唯一地方是const或函数范围内的namespace引用(不包括类成员)。

const int & cir = 1+1; // OK to use cir = 2 after this line 

这个技巧在Andrei Alexandrescu's非常酷scope guard中使用,以便捕获对具体范围内容的基类的const引用。

答案 2 :(得分:0)

请澄清你的意思。

假设您打算这样做:

int * p = NULL;
{
  int y = 22;
  p = &y;
}
*p = 77; // BOOM!

然后不,绝对不会,通过引用来扩展范围。

您可能需要查看智能指针,例如来自boost库:clickety