C/C++ はメモリ管理をプログラムに任せているので注意が必要だった.
std::auto_ptr や boost::shared_ptr などのスマートポインタを使ってメモリリークを 回避するのが王道でしょう.
一方, D にはガベージコレクタ (GC) がある.
明示的に破棄したいときは delete を呼ぶこともできる.
gc.d
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import std.stdio;
class Foo{
int id;
this(int i){
id = i;
}
~this(){
writeln("destroy ", id);
}
}
void main(){
Foo a = new Foo(1);
Foo b = new Foo(2);
delete b;
// delete a;
/*
main 関数を抜けるときに GC が a を破棄しれくれたので destroy 1 が出力される.
*/
}
|
gc.d の実行結果は:
[cactus:~/code_d/d_tuts]% ./gc
destroy 2
destroy 1