割とたいそうな題名を付けたつもりです。でも、そんな大それたことを言うつもりはないです。
先週土曜の某問い詰める会でも少し話したのですが、現行のC++でこういう風にガベージコレクション(GC)を使うことを試してみたいと前々から考えています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | void* operator new(std::size_t x) { // 面倒なのでset_new_handler非対応 if (void* p = GC_malloc(x)) // Boehm GCなど { return p; } else { throw std::bad_alloc(); } } void operator delete(void* p) { } // 何もしない // operator new[]とoperator delete[]も同様に定義する |
メモリ管理だけGCを用い、デストラクタなどそれ以外のセマンティクスは今までの通りです。今までのC++コードがそのまま使える(導入が容易)という特長の一方、shared_ptrなどGCに頼るなら要らないはずのコードがそのままオーバーヘッドになってしまう(メモリ以外のリソース管理がある場合を除く)ことが大きな欠点になると考えています。
もちろん保守的GCしか使えないと思います。この案においては、世代別GCなどオブジェクトの移動を伴うGCの利用を考えていません。
そのうち、適当なプログラムで試してみたいところです。
スポンサード リンク |