我在子例程结束时为类调用析构函数时遇到问题,即使它应该在子例程范围之外定义。
这是显示我的问题的最小代码:
#include <iostream>
using namespace std;
class Foo {
private:
double *array;
public:
Foo(int N) {
array = new double[N];
for (int i=0; i<N; i++) {
array[i]=0;
}
}
~Foo() {
delete[] array;
}
};
void subroutine(Foo x) {
cout << "Hello!" << endl;
}
int main() {
Foo bar(10);
subroutine(bar);
subroutine(bar);
}
现在对象栏的析构函数在第一个子例程完成后被调用,即使它的范围应该是整个 main() 函数?这意味着当我调用第二个子例程时,再次调用析构函数并且我得到了内存泄漏。
我发现我可以通过在子例程中通过引用调用来解决这个问题,但我对这个修复不是很满意,因为我不明白为什么它一开始就不起作用。任何人都可以为我阐明这一点吗?
谢谢。