最近我在一个项目中遇到了一个问题。那里的代码比下面的例子复杂得多,但我希望问题(如果有的话)是一样的。
#include <iostream>
class mObject
{
public:
mObject(){ std::cout << "mObject ctor\n"; }
mObject(const mObject& other){ std::cout << "mObject copy ctor\n"; }
~mObject(){ std::cout << "mObject dtor\n"; }
};
struct cFoo{
cFoo(const mObject& obj):obj_(obj){}
const mObject& get() { return obj_;}
const mObject& obj_;
};
mObject giveme() { return mObject(); }
void func2(const mObject& p) { mObject g = p; }
int main()
{
cFoo k(giveme());
func2(k.get());
return 0;
}
这给了我以下代码:
mObject ctor
mObject dtor
mObject copy ctor
mObject dtor
所以原来的“临时”mObject
实例在使用它之前func2
就死了。object
我认为如果有的话,临时的寿命会延长const&
。将返回分配giveme()
给本地const&
函数main
解决了这个问题。然后临时生命直到main
' 范围结束。那么这里发生了什么???