为什么析构函数不会修改返回的变量

时间:2012-07-27 10:57:30

标签: c++

以下代码使用修改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());
}

1 个答案:

答案 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());
}