以下代码使用修改i
的析构函数。运行析构函数时,2
应该存储在i
中,但当thing()
返回时,我们会观察-1
。
#include <stdio.h>
class Destruct {
int &i;
public:
Destruct(int &_i) : i(_i) {}
~Destruct() {
i = 2;
}
};
int thing() {
int i = -1;
Destruct d(i);
return i;
}
int main() {
printf("i: %d\n", thing());
}
答案 0 :(得分:3)
因为在语句return i
中复制了i之后执行了析构函数。
如果您通过将i
置于事物全局并通过引用返回来更改您的程序,您将看到您想要的内容。
#include <stdio.h>
int i = -1;
class Destruct {
int &i;
public:
Destruct(int &_i) : i(_i) {}
~Destruct() {
i = 2;
}
};
int& thing() {
Destruct d(i);
return i;
}
int main() {
printf("i: %d\n", thing());
}