Rust はガベージコレクタを持たない言語だ。コンパイル時に、構造体などのオブジェクトの所有権と生存状態(ライフタイム)を分析することで、オブジェクトを適切なタイミングでメモリから削除する仕組みになっている。この仕組みはとても良くできているが、時々、削除のタイミングを開発者が自分で制御したいこともある。 特にそれが必要になるのが、FFI(他言語関数インターフェイス)経由で、Rust のオブジェクトを他の言語に渡したい時だろう。この場合、他言語にはオブジェクトへのポインタを渡すことになるが、ライフタイムの分析をコンパイラに任せると、Rust の関数を抜けた時にオブジェクトの寿命が尽きたと判断されて、削除されてしまうことがある。これが起こると、他言語に渡したポインタは、参照先のオブジェクトが存在しない状態、いわゆる「ダングリングポインタ」になってしまう。 この記事では簡単な例を使って、ダングリ