下面的代码显示在函数create()
中创建的对象的生命周期延长到在const ref
创建的生命周期main
,这在所有情况下都正确吗?我的意思是我们可以在某些情况下通过创建对它的引用来延长临时的生命周期?或者在这种特定情况下,编译器行为不端?
用MSVC2005编译
#include <iostream>
class testClass
{
public:
testClass()
{
std::cout << "in testClass " << ((void*)this) << std::endl;
}
~testClass()
{
std::cout << "in ~testClass " << ((void*)this) << std::endl;
}
};
testClass create()
{
return testClass();
}
int main()
{
{
testClass const& obj = create();
std::cout << "we got a const reference to obj " << ((void*)&obj) << std::endl;
}
return 0;
}
输出
in testClass 0018FF13
we got a const reference to obj 0018FF13
in ~testClass 0018FF13
当然,其他人可能会得到不同的地址......在上述情况下,我期待使用函数创建的对象的析构函数create()
,将在行之前调用
std::cout << "we got a const reference to obj " << ((void*)&obj) << std::endl;
被执行。