【发布时间】:2010-09-20 09:08:20
【问题描述】:
在 C++ 中,通过引用扩展范围是否安全?
在代码中,我的意思是:
MyCLass& function badIdea()
{
MyClass obj1;
...
return obj1;
}
【问题讨论】:
在 C++ 中,通过引用扩展范围是否安全?
在代码中,我的意思是:
MyCLass& function badIdea()
{
MyClass obj1;
...
return obj1;
}
【问题讨论】:
通过引用扩展范围是不安全的。 C++ 中的对象在 obj1 超出范围时不会被引用计数,它将被删除,引用 badIdea() 的结果只会给你带来麻烦
【讨论】:
唯一可以使用引用扩展范围的地方是在 namespace 或函数范围中使用 const 引用(不包括类成员)。
const int & cir = 1+1; // OK to use cir = 2 after this line
这个技巧在Andrei Alexandrescu's 非常酷的scope guard 中使用,以便捕获对具体作用域保护的基类的const 引用。
【讨论】:
请澄清你的意思。
假设您打算这样做:
int * p = NULL;
{
int y = 22;
p = &y;
}
*p = 77; // BOOM!
那么不,绝对不是,范围不会通过引用来扩展。
您可能想查看智能指针,例如来自 boost 库:clickety
【讨论】: