所以我有一些 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 中创建。因此,C
在 f
函数范围结束时被销毁,就在调用 main 中的 f(i)
之后,f
作用域被销毁,C
对象的析构函数被调用。
关于C++:什么时候在最后一条语句之前调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35188833/