Function core::mem::drop

1.0.0 · source ·
pub fn drop<T>(_x: T)
Expand description

处理一个值。

通过调用 Drop 的参数实现来实现。

这对于实现 Copy 的类型实际上不起作用,例如 integers. 这样的值被复制并将 then 移到函数中,因此该值在此函数调用之后仍然存在。

这个功能并不神奇。它的字面定义为

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

由于 _x 已移入函数,因此它会在函数返回之前自动丢弃。

Examples

基本用法:

let v = vec![1, 2, 3];

drop(v); // 显式丢弃 vector
Run

由于 RefCell 在运行时强制执行借用规则,因此 drop 可以发布 RefCell 借用:

use std::cell::RefCell;

let x = RefCell::new(1);

let mut mutable_borrow = x.borrow_mut();
*mutable_borrow = 1;

drop(mutable_borrow); // 放弃该插槽上的可变借用

let borrow = x.borrow();
println!("{}", *borrow);
Run

实现 Copy 的整数和其他类型不受 drop 的影响。

#[derive(Copy, Clone)]
struct Foo(u8);

let x = 1;
let y = Foo(2);
drop(x); // `x` 的副本已移动并丢弃
drop(y); // `y` 的副本已移动并丢弃

println!("x: {}, y: {}", x, y.0); // 仍然可用
Run