reference - 当我使用引用而不是拥有的值调用 std::mem::drop 时会发生什么?
问题描述
fn main() {
let k = "fire";
drop(k);
println!("{:?}", k);
}
k
为什么我掉了之后还能用?drop
不会自动取消引用?如果是,那为什么?的实现是Drop
什么样的&str
?
解决方案
当我打电话
std::mem::drop
给参考时会发生什么
引用本身被删除。
引用而不是拥有的值
引用是一个值。
k
为什么我掉了之后还能用?
因为不可变指针实现了Copy
. 你传入一个引用的副本,它就被删除了。
drop
不会自动取消引用?
不,不是的。
的实现是
Drop
什么样的&str
?
没有任何类型的参考,不可变或可变的,所以它实际上是 1:
impl Drop for &str {
fn drop(&mut self) {}
}
也可以看看:
1 — 正如Peter Hall 指出的那样Drop
,有一个空的实现和没有用户提供的实现是有区别的Drop
,但就这个问题而言,它们是相同的。
推荐阅读
- javascript - 将焦点放在具有禁用属性的输入的输入元素上
- python - 硒找不到网络驱动程序
- c++ - 如何从 C++ 中的字符串中删除前缀或后缀?
- javascript - 如何将每行数据提交到 Asp .Net 控制器
- node.js - 如何在nestjs中模拟猫鼬模型构造函数
- google-chrome-extension - 如何在 chrome 扩展中获取已删除的缓存大小?
- ios - SwiftUI:如何在动态列表或 LazyVStack 中获取视图框架
- typescript - 在推断该类型的某些部分时声明 TypeScript 类型
- python - 在我的计算器程序中添加一个函数。(Python)
- android - 有什么方法可以检测 Android 中新应用程序的安装吗?