本文简要介绍rust语言中 Function std::mem::needs_drop
的用法。
用法
pub const fn needs_drop<T>() -> bool
如果删除 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。
例子
下面是一个集合如何使用 needs_drop
的示例:
use std::{mem, ptr};
pub struct MyCollection<T> {
/* ... */
}
impl<T> Drop for MyCollection<T> {
fn drop(&mut self) {
unsafe {
// drop the data
if mem::needs_drop::<T>() {
for x in self.iter_mut() {
ptr::drop_in_place(x);
}
}
self.free_buffer();
}
}
}
相关用法
- Rust never用法及代码示例
- Rust null_mut用法及代码示例
- Rust null用法及代码示例
- Rust UdpSocket.set_multicast_loop_v6用法及代码示例
- Rust i64.overflowing_add_unsigned用法及代码示例
- Rust Box.downcast用法及代码示例
- Rust BTreeMap.last_key_value用法及代码示例
- Rust str.make_ascii_uppercase用法及代码示例
- Rust u128.checked_pow用法及代码示例
- Rust usize.wrapping_mul用法及代码示例
- Rust AtomicU8.fetch_sub用法及代码示例
- Rust PanicInfo.payload用法及代码示例
- Rust MaybeUninit.assume_init_mut用法及代码示例
- Rust String.try_reserve用法及代码示例
- Rust Mutex.new用法及代码示例
- Rust f32.exp用法及代码示例
- Rust Result.unwrap_or_else用法及代码示例
- Rust slice.sort_unstable_by_key用法及代码示例
- Rust Formatter.precision用法及代码示例
- Rust i128.log2用法及代码示例
- Rust OsStr.to_ascii_uppercase用法及代码示例
- Rust f32.hypot用法及代码示例
- Rust RefCell.try_borrow_unguarded用法及代码示例
- Rust i16.log10用法及代码示例
- Rust LowerExp用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Function std::mem::needs_drop。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。