我正在使用TempDir
struct创建和删除磁盘上的文件夹。除了构造之外,代码中没有引用TempDir
本身。
由于编译器警告未使用的对象,我尝试(un)将TempDir-struct命名为_
,但这会导致结构立即被销毁。
有一个很好的解决方案吗?
请参阅example code,将one
与two
进行比较:
pub struct Res;
impl Drop for Res {
fn drop(&mut self) {
println!("Dropping self!");
}
}
fn one() {
println!("one");
let r = Res; // <--- Dropping at end of function
// but compiler warns about unused object
println!("Before exit");
}
fn two() {
println!("two");
let _ = Res; // <--- Dropping immediately
println!("Before exit");
}
fn main() {
one();
two();
}
答案 0 :(得分:4)
为变量赋予名称,但在名称前加下划线会延迟销毁,直到范围结束,但不会触发未使用的变量警告。
struct Noisy;
impl Drop for Noisy {
fn drop(&mut self) {
println!("Dropping");
}
}
fn main() {
{
let _ = Noisy;
println!("Before end of first scope");
}
{
let _noisy = Noisy;
println!("Before end of second scope");
}
}
Dropping
Before end of first scope
Before end of second scope
Dropping