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

在C++;,通过引用扩展范围是否安全? 在C++中,通过引用扩展范围是否安全?,c++,reference,scope,C++,Reference,Scope,在代码中,我的意思是: MyCLass& function badIdea() { MyClass obj1; ... return obj1; } 请澄清你的意思 假设您打算这样做: int * p = NULL; { int y = 22; p = &y; } *p = 77; // BOOM! 那么,绝对不是,范围不会因为引用而扩展 您可能希望查看智能指针,例如来自boost库的指针:通过引用扩展范围是不安全的。C++中的对象在Obj1超

在代码中,我的意思是:

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

请澄清你的意思

假设您打算这样做:

int * p = NULL;
{
  int y = 22;
  p = &y;
}
*p = 77; // BOOM!
那么,绝对不是,范围不会因为引用而扩展


您可能希望查看智能指针,例如来自boost库的指针:

通过引用扩展范围是不安全的。C++中的对象在Obj1超出范围时将不引用引用,它将被删除,引用BadiDy()的结果只会使您陷入麻烦

。在引用中扩展范围的唯一位置是在代码< >命名空间< /代码>或函数作用域(不使用类成员)中使用<代码> const <代码>引用。
这一技巧在非常酷的情况下使用,以捕获对具体作用域保护的基类的
const
引用。

引用的作用与指针相同,只是它们不能重新绑定注意,这只是“扩展范围”,从这个意义上说,通常非常狭窄的临时“范围”扩展到父范围,这与OP的要求完全不同。首先,C++的一个鲜为人知的方面,很多人都困惑了。问题是C++和引用绑定。引用计数不在其中。我已经添加了自己的答案,但简单地说,您可以通过引用绑定扩展对象的范围,但在设计时应该小心。如果您不理解,请不要这样做。我认为他提到了引用计数,因为在支持引用计数的语言中,本地对象不超出范围就可以返回引用(当然,C++不是其中之一)。我可以看出术语“引用计数”是如何混淆问题的,我试图暗示其他语言有可能保持分配的对象存活的机制,这可能不是一个好主意
const int & cir = 1+1; // OK to use cir = 2 after this line