我很确定,应该在相应函数的出口处调用函数参数的析构函数.考虑5.2.2p4的C++ 11标准:
[...]参数的生命周期在定义它的函数返回时结束.[...]
但是,让我们试试这段代码:
#include <iostream>
using namespace std;
struct Logger {
Logger(int) { cout << "Construct " << this << '\n'; }
Logger(const Logger&) { cout << "Copy construct " << this << '\n'; }
~Logger() { cout << "Destruct " << this << '\n'; }
};
int f(Logger)
{
cout << "Inside f\n";
return 0;
}
int main()
{
f(f(f(10)));
}
Run Code Online (Sandbox Code Playgroud)
用gcc或clang编译后,输出如下:
Construct 0x7fffa42d97ff
Inside f
Construct 0x7fffa42d97fe
Inside f
Construct 0x7fffa42d97fd
Inside f
Destruct 0x7fffa42d97fd
Destruct 0x7fffa42d97fe …Run Code Online (Sandbox Code Playgroud) c++ ×1