考虑以下代码段:
#include <iostream>
using namespace std;
class Temp {
public:
Temp() { cout << "Temp()" << endl;}
~Temp() { cout << "~Temp()" << endl;}
};
Temp GetTemp() {
cout << "GetTemp" << endl;
return Temp();
}
Temp TakeTemp(Temp temp) {
cout << "TakeTemp" << endl;
return temp;
}
int main()
{
TakeTemp(GetTemp());
return 0;
}
当我跑TakeTemp(GetTemp());
的时候,输出看起来像
GetTemp
Temp()
TakeTemp
~Temp()
~Temp()
请注意,~Temp()
此处调用了两次(但仅构造了 1 个临时 obj)。这看起来很奇怪,因为 1) 返回的 temp 变量GetTemp()
的生命周期应该扩展到完整的表达式,以及 2) 由于我们temp
直接返回 in TakeTemp
,因此返回值优化将重用相同的对象。
谁能解释为什么这里有多个 dstor 调用?
(请注意,如果我们放置更多的 TakeTemp() 层,dstor 调用的数量会成比例地增长。)