他の人はモジュール レベルのデストラクタについて言及していますが、手動のメンテナンスが多すぎるため実際には実用的ではありません。D には、静的コンストラクタ/デストラクタを持つモジュールが循環インポートを持てないという苛立たしい癖があります。例えば:
モジュール A
module A;
import B;
static ~this() {}
void main() {}
モジュール B
module B;
import A;
static ~this() {}
走ってみて…
% dmd A.d B.d
% ./A
Cycle detected between modules with ctors/dtors:
A -> B -> A
object.Exception@src/rt/minfo.d(331): Aborting!
D は、デストラクタが相互に依存していない場合でも、たまたま相互に依存している場合に備えて、これを行います。これにより、コードの奇妙な「リファクタリング」を実行して、この問題を回避する必要があります。実際に依存関係がないことを D に伝える方法はありません。
リソースの破棄を処理するためのより良い解決策は、可能な限りスコープを設定することです。破棄が必要なグローバル リソースは使用しないでください。また、クラス ファイナライザーに依存しないでください。実行が保証されていないためです(Java にも同じ問題があります) 。
または、C で行うのと同じように実行してください: 手動シャットダウン。もう少し手間がかかりますが、実際には大きな問題ではありません。循環的な輸入に取り組むよりも確かに簡単です。