C++:什么时候在最后一条语句之前调用析构函数?

标签 c++ destructor

所以我有一些 C++ 代码:

#include <iostream>

using namespace std;

class C {
public:
    C() {i = 9; cout << "C0:" << i << endl;}

    C(int i0) {i = i0; cout << "C1:" << i << endl;}

    ~C() {cout << "C2:" << i << endl;}
private:
    int i;
};

void f(int i) {
    C c(i);
}

int main(int argc, char* argv[]) {
    for (int i  = 0; i < 1; i++) {
        cout << "X" << endl;
        f(i);
        cout << "Y" << endl;
    }
}

输出是:

X
C1:0
C2:0
Y

这很奇怪,因为 C2:0 行是析构函数的一部分,据我所知,它是在最后一条语句之后调用的。所以我的问题是在什么样的情况下在最后一条语句之前调用析构函数?

最佳答案

对象 C 在函数 f 中创建。因此,Cf 函数范围结束时被销毁,就在调用 main 中的 f(i) 之后,f 作用域被销毁,C 对象的析构函数被调用。

关于C++:什么时候在最后一条语句之前调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35188833/

相关文章:

C++简单的函数输出缓存设计

c++ - 为什么即使是 16 字节对齐的地址也会导致 _mm_load_si128 导致访问冲突?

c++ - Qt Quick 中的阻塞操作

C++ 破坏表达式中的临时对象

c++ - 当对象陷入无限循环时被销毁会发生什么?

c++ - 删除 vector 类成员

c++ - 如何 Hook 时间功能

c++ nlohmann json - 如何测试嵌套对象是否存在或为空

c++ - 我必须删除 lambdas 吗?

c++ - 琐碎的析构函数会导致别名吗