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


Rust Box.into_raw_with_allocator用法及代码示例


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

用法

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

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

指针将正确对齐且非空。

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

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

例子

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

#![feature(allocator_api)]

use std::alloc::System;

let x = Box::new_in(String::from("Hello"), System);
let (ptr, alloc) = Box::into_raw_with_allocator(x);
let x = unsafe { Box::from_raw_in(ptr, alloc) };

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

#![feature(allocator_api)]

use std::alloc::{Allocator, Layout, System};
use std::ptr::{self, NonNull};

let x = Box::new_in(String::from("Hello"), System);
let (ptr, alloc) = Box::into_raw_with_allocator(x);
unsafe {
    ptr::drop_in_place(ptr);
    let non_null = NonNull::new_unchecked(ptr);
    alloc.deallocate(non_null.cast(), Layout::new::<String>());
}

相关用法


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