gpt4 book ai didi

rust - 为什么 Drop 使用 &mut self 而不是 self?

转载 作者:行者123 更新时间:2023-11-29 07:41:48 57 4
gpt4 key购买 nike

为什么 Drop的方法有签名 fn drop(&mut self) 而不是 fn drop(self)?这使得将值移出字段变得困难,例如self.join_handle.join()std::mem::drop(self.file)(错误:无法移出 X 类型,它定义了 Drop 特性) .

最佳答案

让我们看看std::mem::drop是如何实现的:

pub fn drop<T>(_x: T) { }

没错:这是一个空函数!那是因为它利用移动语义来获取其参数的所有权。如果 T 实现了 Drop,编译器会自动在函数末尾插入对 Drop::drop(_x) 的调用。这发生在所有按值接收的参数上(也就是说,事实上,所有 参数,但删除引用不会删除所指对象)。

现在考虑如果 Drop::drop 按值获取其参数会发生什么:编译器将尝试在 中的参数上调用 Drop::drop Drop::drop — 这会导致堆栈溢出!当然,您可以对参数调用 mem::drop,这也会尝试递归调用 Drop::drop

关于rust - 为什么 Drop 使用 &mut self 而不是 self?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30905826/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com