为什么
Drop
的方法签名是fn drop(&mut self)
而不是fn drop(self)
?这使得从字段中移动值变得困难,例如self.join_handle.join()
或std::mem::drop(self.file)
(错误:无法移动定义了Drop
trait的类型X
)。
std::mem::drop
存在的唯一原因是为了调用者在调用drop
前强制放弃所有权。如果drop
直接接受self
,则不需要std::mem::drop
。 - GManNickGstd::mem::drop
没有 任何特殊之处。它存在的唯一原因是为了方便,因为有时您需要删除某些内容(例如锁保护),而drop(guard);
比let _x = guard;
更漂亮。std::ops::Drop::drop
和std::mem::drop
具有相同的名称基本上是巧合。 - Chris Morgan