我正在调用一个 C 构造函数keyNew
,该函数为结构分配内存Key
并将 a 返回*mut Key
到 Rust 端。使用Box::from_raw
包装指针并获取它的所有权是否合适?
我也可以直接返回原始指针,但这会导致 API 非常丑陋,而且对于 Rust 来说并不符合习惯。
我还想在 Key 上实现 Drop Trait,以便keyDel
自动调用析构函数,这将是对 C 中手动调用的改进。在我看来,这是一个更好的 API。然而,实现 Drop Trait 要求不实现 Copy Trait,因此由于“移出取消引用的内容”,不再可能取消引用原始指针。
他们的密钥是由 rust-bindgen 生成的
#[repr(C)]
#[derive(Debug, Clone)]
pub struct Key {
_unused: [u8; 0],
}
Run Code Online (Sandbox Code Playgroud)
的构造函数Key
是这样实现的
fn new() -> Box<Key> {
unsafe { Box::from_raw(keyNew(0 as *const i8)) }
}
Run Code Online (Sandbox Code Playgroud)
和析构函数
impl Drop for Key {
fn drop(&mut self) {
unsafe { keyDel(self) }; …
Run Code Online (Sandbox Code Playgroud)