서브 루틴의 범위 밖에서 정의되어야한다고해도 서브 루틴의 끝에서 클래스에 대해 호출되는 소멸자에 문제가 있습니다.C++ : 소멸자가 범위를 벗어나기 전에 호출되고 있습니까?
#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);
}
지금 여기에 첫 번째 서브 루틴 후 호출되는 객체 막대의 소멸자가이 범위는 전체해야 비록 완료 : 여기
내 문제를 표시 내가 가진 코드의 작은 조각이다 주요 기능? 즉, 두 번째 서브 루틴을 호출하면 소멸자가 다시 호출되고 메모리 누수가 발생합니다.
서브 루틴에서 참조로 호출하여이 문제를 해결할 수 있지만 처음에는 작동하지 않는 이유를 이해할 수 없기 때문에이 픽스에 만족하지 않습니다. 누군가 나를 위해이 일을 밝힐 수 있습니까?
감사합니다.
소멸자가 주어지면'Foo'의 복사 생성자와 복사 할당 연산자를 정의하거나 삭제해야합니다. "rule of three"로 검색하십시오. –
"클래스에 대해 소멸자가 호출되었습니다"- ** 클래스 **와 ** 객체 **를 일관되게 구별하면 시간이 지남에 따라 훨씬 더 명확 해집니다. 소멸자는 클래스가 아닌 ** 객체 **에서 호출됩니다. –