小编Bev*_*isk的帖子

函数参数不会在该函数的出口处销毁

我很确定,应该在相应函数的出口处调用函数参数的析构函数.考虑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++

14
推荐指数
2
解决办法
1083
查看次数

标签 统计

c++ ×1