我想了解关于引用和右值的确切C++(前C++ 0x)行为。以下有效吗?
传递给const引用的C++ rvalue
void someFunc (const MyType & val) {
//do a lot of stuff
doSthWithValue (val);
}
MyType creatorFunc () {
return MyType ("some initialization value");
}
int main() {
someFunc (creatorFunc());
return 0;
}
我发现类似的代码库中的我试图修改。我发现Visual Studio 2005下的代码崩溃。
我了解上述情况的方式是:
creatorFunc按值返回,因此创建了一个临时的MyType对象obj1。 (并保留在堆栈上?) someFunc正在引用该临时对象,随着计算的进行,临时对象被覆盖/释放。
现在,令人难以置信的是,代码大多数情况下工作正常。更重要的是,通过一段简单的代码,我无法重现崩溃。
发生了什么/应该在这里发生?如果引用(val)是const或不是,那么问题很重要吗? creatorFunc返回的对象的生命周期是多少?
你是不是指'someFunc(creatorFunc());'? – 2010-06-25 15:53:12
当然,谢谢 – 2010-06-25 15:57:20
你可能在某处引用了鼻子恶魔,他们正在奔跑。当你在代码中崩溃时,不应该定期崩溃,并且不能在简单代码中重新创建问题......通常这是感染从系统其他地方传播的鼻恶魔。 – 2010-06-25 16:16:54