欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Rust:全局变量被覆盖时,会不会释放原有资源?

程序员文章站 2024-01-25 21:41:17
...

为弄明白这个问题,写了下面的代码。其中全局变量 D 被覆盖两次,代码和运行结果如下:

use std::ops::Drop;

struct Data(i32);

impl Drop for Data {
    fn drop(&mut self) {
        println!("drop...{}", self.0)
    }
}

static mut D: Data = Data(0);

fn main() {
    unsafe {
        D = Data(1);
        D = Data(2);
    }
}

========= run result ==========

drop...0
drop...1

可见,全局变量重新赋值时,原有的内容会首先调用 drop 释放资源,然后才会把新值放进去,以保证不会出现内存泄露。