サブルーチンのスコープ外で定義する必要があるにもかかわらず、サブルーチンの最後でクラスに対してデストラクタが呼び出されるという問題があります。
これが私の問題を表示する私が持っているコードの最小部分です:
#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()関数全体である必要がありますか?これは、2番目のサブルーチンを呼び出すと、デストラクタが再度呼び出され、メモリリークが発生することを意味します。
サブルーチンで参照を呼び出すことでこれを修正できることがわかりましたが、そもそもなぜ機能しなかったのか理解できないため、この修正にはあまり満足していません。誰かが私のためにこれにいくつかの光を当てることができますか?
ありがとう。