如何延迟破坏未命名的对象?

时间:2016-08-23 21:58:13

标签: rust

我正在使用TempDir struct创建和删除磁盘上的文件夹。除了构造之外,代码中没有引用TempDir本身。

由于编译器警告未使用的对象,我尝试(un)将TempDir-struct命名为_,但这会导致结构立即被销毁。

有一个很好的解决方案吗?

请参阅example code,将onetwo进行比较:

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();
}

1 个答案:

答案 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