Function std::mem::needs_drop
1.21.0 (const: 1.36.0) · source · pub const fn needs_drop<T>() -> boolwhere
T: ?Sized,
Expand description
如果丢弃类型为 T
的值很重要,则返回 true
。
这纯粹是一个优化提示,可以保守地实现:
对于实际上不需要丢弃的类型,它可能返回 true
。
因此,始终返回 true
将是此函数的有效实现。但是,如果此函数实际返回 false
,则可以确定丢弃 T
没有副作用。
需要手动丢弃其数据的诸如集合之类的底层实现,应使用此函数来避免在销毁它们时不必要地丢弃其所有内容。
这可能不会对发行版本产生影响 (可以轻松检测并消除没有副作用的循环),但是对于调试版本而言,这通常是一个大胜利。
请注意,drop_in_place
已经执行了此检查,因此,如果您的工作量可以减少到少量的 drop_in_place
调用,则无需使用此功能。
特别要注意的是,您可以 drop_in_place
一个切片,这将对所有值进行一次 needs_drop 检查。
因此,像 Vec 这样的类型只是 drop_in_place(&mut self[..])
,而没有显式使用 needs_drop
。
另一方面,像 HashMap
这样的类型必须一次丢弃一个值,并且应使用此 API。
Examples
这是一个集合如何利用 needs_drop
的示例:
use std::{mem, ptr};
pub struct MyCollection<T> {
/* ... */
}
impl<T> Drop for MyCollection<T> {
fn drop(&mut self) {
unsafe {
// 丢弃数据
if mem::needs_drop::<T>() {
for x in self.iter_mut() {
ptr::drop_in_place(x);
}
}
self.free_buffer();
}
}
}
Run