9

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

在代码中,我的意思是:

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

3 回答 3

22

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

于 2008-11-02T10:18:36.233 回答
15

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

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

这个技巧在Andrei Alexandrescu 的非常酷的范围保护中使用,以捕获const对具体范围保护的基类的引用。

于 2008-11-02T10:25:18.463 回答
1

请澄清你的意思。

假设您打算这样做:

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

那么不,绝对不是,范围不会通过引用来扩展。

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

于 2008-11-02T10:16:42.680 回答