Rust 谁负责在用完盒子后释放内存

Rust 谁负责在用完盒子后释放内存,rust,Rust,从生锈的文件 into_raw函数使用一个框并返回原始指针。信息技术 不会破坏或释放任何内存 在此代码中: fn main() { let b = Box::new("hello".to_owned()); let a: *mut String = Box::into_raw(b); } 我没有使用不安全的块,因此我们应该没有内存泄漏。因此,如果Box对象不负责在内存消耗后释放内存,但内存未被释放并可供进一步使用,并且原始指针不属于资源所有,那么谁将释放内存?指定:调用此函数后

从生锈的文件

into_raw函数使用一个框并返回原始指针。信息技术 不会破坏或释放任何内存

在此代码中:

fn main() {
    let b = Box::new("hello".to_owned());
    let a: *mut String = Box::into_raw(b);
}
我没有使用不安全的块,因此我们应该没有内存泄漏。因此,如果Box对象不负责在内存消耗后释放内存,但内存未被释放并可供进一步使用,并且原始指针不属于资源所有,那么谁将释放内存?

指定:调用此函数后,调用方负责先前由Box管理的内存,特别是调用方应正确销毁T并释放内存。正确的方法是使用Box::from_raw函数将指针转换回Box,因为Box没有指定如何分配内存。”

因此,如果您让原始指针离开scobe而不将其转换回方框,则存在内存泄漏。

免责声明:由@fjh在评论中指出,但值得一提

一般来说,内存安全并没有很好的定义,因此为Rust建立了一个特定的定义。其要点是,对于Rust来说,内存安全意味着:只访问分配的和初始化的内存

此定义的结果是内存泄漏是安全的,因为它们不会导致指针悬空。不运行析构函数也被认为是安全的,因为它们不会违反内存安全(尽管这可能会泄漏其他资源)

  • 使用
    std::rc::rc
    std::sync::Arc


Box::from_raw
主要用于与FFI交互,以便能够跨语言边界转移所有权,正如其文档中所述,释放内存的正确方法是使用
Box::from_raw
从中重新创建
Box

您可以在不使用
不安全的
内存的情况下泄漏内存泄漏不会违反内存安全。@fjh,谢谢提醒,我忘了这个