...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

RAII的な何か

基本的にデストラクタはこの手の解放処理には使えないんじゃないかと思います。(デストラクタが確実に呼ばれるという保証すらないため)
適当にdisposeだのreleaseだのといった関数でも作って、明示的に呼び出してやるのが良いようです。
その場合でも、D言語だとC言語C++言語と違ってスコープガード文があるのため比較的安全で、楽なのです。
scope a = new A;
scope (exit) a.dispose;

http://pokohimesama.blog98.fc2.com/blog-entry-331.html
A a = new A;
scope(exit)delete a;

でもダメなんだっけ?
これでいけるなら,

scope a = new A; // 直後に scope(exit)delete a; をぶち込む

って実装を加えるだけでD言語のデストラクタ周りの問題のひとつは解決?


せめてそういう風にdmdをいじれるようになりたいんだがなあー.