文档中提到 ownership 只是编译期间的规则,可以避免 double free。
fn foo() {
let a = Box::new(1);
let b = a;
}
问题:在 foo 函数结束时,运行时如何知道应该 deallocate 哪个变量?
一个思路是,既然 ownership 规则保证了所有权 move 之后,不能再访问原变量,那么是不是可以简单地针对重复指针只做一次 deallocate 即可?
1
共 3 条评论, 1 页
评论区
写评论foo函数结束时,b关联的资源被释放。b和a所在的栈帧统一被回收。
不是运行时知道free哪个,而是在编译时就确定了只需要free变量b。
运行时 drop: https://doc.rust-lang.org/reference/destructors.html
(裸)指针没有所有权和借用规则:https://doc.rust-lang.org/reference/types/pointer.html#raw-pointers-const-and-mut