、あなたは(あなたのプログラムでnew
演算子を使用して)オブジェクトdynamically
用のメモリを割り当てられているので、あなたがdelete
演算子を使用して、それを解放しなければなりませんが。そうしないと、memory leaks
が作成されます。つまり、あなたが割り振っているメモリを追跡し、もはやそれらを必要としないときに解放する必要があります。 memory leaks over hereについて読むことができます。
しかし、automatic
オブジェクトの場合、destructor
は、オブジェクトがスコープから外れると暗黙的に呼び出されます。たとえば、
int main()
{
foo temp;
// Do Something Interesting
return 0;
}
上記のプログラムの出力結果では、Destructor
が呼び出されます。
また、プログラムには他にも問題があります。 1つはあなたのクラスのコンストラクタとデストラクタをfoo
の下にPublic
の下に宣言していないということです。もう一つは、デストラクタ~foo
と一対の括弧を忘れてしまったことです。プログラムをコンパイルしようとすると、コンパイラはエラーをスローします。正しいプログラムは以下の通りです:
#include <iostream>
using namespace std;
class foo {
public:
foo() {
cout<<"This is constructor!"<<endl;
}
~foo() {
cout<<"This is destructor! "<<endl;
}
};
int main() {
foo* temp;
temp = new foo();
/*some code*/
delete temp;
return 0;
}
メモリリークが発生しているためです。 – juanchopanza
[これらの書籍](http://stackoverflow.com/q/388242/2069064)のいくつかを見てみることをお勧めします。 – Barry
終了する前に 'delete temp'を実行することによって、いつでも強制的にそれを強制することができます。 – infixed