< 返回版块

0xe994a4 发表于 2023-03-10 16:18

Tags:ownership

文档中提到 ownership 只是编译期间的规则,可以避免 double free。

fn foo() {
    let a = Box::new(1);
    let b = a;
}

问题:在 foo 函数结束时,运行时如何知道应该 deallocate 哪个变量?

一个思路是,既然 ownership 规则保证了所有权 move 之后,不能再访问原变量,那么是不是可以简单地针对重复指针只做一次 deallocate 即可?

评论区

写评论
Mike Tang 2023-03-10 21:32

foo函数结束时,b关联的资源被释放。b和a所在的栈帧统一被回收。

wangbyby 2023-03-10 17:14

不是运行时知道free哪个,而是在编译时就确定了只需要free变量b。

苦瓜小仔 2023-03-10 17:13

运行时 drop: https://doc.rust-lang.org/reference/destructors.html

是不是可以简单地针对重复指针只做一次 deallocate 即可?

(裸)指针没有所有权和借用规则:https://doc.rust-lang.org/reference/types/pointer.html#raw-pointers-const-and-mut

1 共 3 条评论, 1 页