2009-12-03

placement newでBoehm GCのgc_cleanup

Boehm GCに付属のgc_cpp.hでは、gc_cleanupという構造体が提供されている。これは継承するとGC時に自動的にデストラクタを呼んでくれるというもので、非推奨のGC_finalize_allと組み合わせて使うとリソース管理に非常に便利だ。(つまり、終了時に他ライブラリのリソースを開放させることができる)
gc_cleanupを継承するように書き換えることができればいいが、それも面倒な場合がある。
一度スマートポインタ的なものを試した。

逆に不便になった。(というか、スマートポインタを使いたくないからBoehm GCを使っている)
placement newというものを使うとコンストラクタのメモリ確保をフックできるようなので、それで試してみた。
たとえば new (gc_cleanup_alloc<std::vector<int > >()) std::vector<int>() のように使う。
いまのところ問題なく動いている。

0 件のコメント:

コメントを投稿