GC (ガベージコレクタ)

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

Previous topic

アクセス保護属性

Next topic

RAII