P.UNS.FFI.03 当使用来自 C 的指针时,如果该指针需要管理内存,则需要为包装该指针的 Rust 类型实现 Drop 特质
【描述】
Rust 里通过结构体包装该指针,并且为该结构体实现 Drop 来保证相关资源可以安全释放。
【正例】
下面示例中 *mut sys::VMContext
是来自于外部的 C-ABI
指针,它需要管理内存,所以在 Rust 这边使用结构体包装该指针,并实现 Drop
,通过 Drop
来调用 C-ABI
回调函数来释放内存。
#![allow(unused)] fn main() { pub struct Vm { pub(crate) ctx: *mut sys::VMContext, } impl Drop for Vm { fn drop(&mut self) { if !self.ctx.is_null() { unsafe { sys::VMDelete(self.ctx) }; } } } }