在 Rust编程语言的Chapter 4中,drop
函数的引入是在该函数内分配的所有变量的任何作用域结尾处隐式调用的范围。这样可以解决常见的alloc / dealloc问题。
我可以想像在某些情况下想要放弃更早。 This question解释了如何显式强制删除,也可以通过内部范围的声明在早期强制取消分配:
let mut b = cheap_default_initialization();
{
let a = some_large_allocation();
b = some_other_large_allocation(a);
some_other_work(a, b);
}
let c = third_large_allocation(b);
但是,显式调用drop似乎很尴尬,因为所有权系统的目的之一是避免程序员显式,容易出错的重新分配。内部作用域解决方案似乎更优雅,但也可能需要进行突变,否则将是不必要的(如示例中所示)。
是否有比这两种方法更早的惯用方式?是否有更好的方法或何时应使用哪种方法的普遍共识?