【Rust】static でも Drop したい
CRANK

Rustのstatic変数はいわゆるグローバル変数として使われることが多いですが、static変数はDropできない(デストラクタが呼ばれない)という特徴があります。Static items do not call drop at the end of the program. なライフタイムを持つstatic変数はdrop() の実行時でも生存している(有効である)必要があるため、自然な仕様に思えます。一方で、ある構造体がメモリに限らない一般的なリソースを所有するような場合、解放処理はDropとして実装されることが多いです。そのような構造体をプログラム全体で共有したいとき、static変数として表現すると、最初に提示した「Dropできない」という特徴が足枷になってしまうことがあります。この記事ではそのような場合の対処法をいくつか考えようと思います。 1. static変数を使わない設計上static変数として扱わず、ローカル変数として明示的に引数等で渡して問題ないのであればこれが一番簡単な方法です。この場合問題なくdropが呼ばれます。 2. 明示的にデストラクタを呼ぶプログラム中で終了処理としてデストラクタに相当する処理を実行できるのであれば、そうするのも簡単な方法です。ただ、デストラクタに相当する処理を…

zenn.dev
Related Topics: Rust
1 comments