当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Box.into_raw用法及代码示例


本文简要介绍rust语言中 std::boxed::Box.into_raw 的用法。

用法

pub fn into_raw(b: Box<T, A>) -> *mut T

使用 Box ,返回一个包装的原始指针。

指针将正确对齐且非空。

调用此函数后,调用者负责先前由 Box 管理的内存。特别是,调用者应正确销毁 T 并释放内存,同时考虑到 Box 使用的 memory layout 。最简单的方法是使用 Box::from_raw 函数将原始指针转换回 Box,从而允许 Box 析构函数执行清理。

注意:这是一个关联函数,这意味着您必须将其称为 Box::into_raw(b) 而不是 b.into_raw() 。这样就不会与内部类型上的方法发生冲突。

例子

使用 Box::from_raw 将原始指针转换回 Box 以进行自动清理:

let x = Box::new(String::from("Hello"));
let ptr = Box::into_raw(x);
let x = unsafe { Box::from_raw(ptr) };

通过显式运行析构函数并释放内存进行手动清理:

use std::alloc::{dealloc, Layout};
use std::ptr;

let x = Box::new(String::from("Hello"));
let p = Box::into_raw(x);
unsafe {
    ptr::drop_in_place(p);
    dealloc(p as *mut u8, Layout::new::<String>());
}

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::boxed::Box.into_raw。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。