【发布时间】:2018-07-21 18:59:42
【问题描述】:
我正在制作一个跨平台的终端库。因为我的库更改了终端的状态,所以我需要在进程结束时恢复对终端所做的所有更改。我现在正在实现这个功能,并在思考如何在最后恢复到原始终端状态。
我以为程序启动时会初始化一个静态变量,而当程序结束时,这个静态变量会被销毁。由于我的静态变量是一个实现了 Drop 特征的结构,它会在程序结束时被删除,但情况并非如此,因为字符串“drop called”从未打印出来:
static mut SOME_STATIC_VARIABLE: SomeStruct = SomeStruct { some_value: None };
struct SomeStruct {
pub some_value: Option<i32>,
}
impl Drop for SomeStruct {
fn drop(&mut self) {
println!("drop called");
}
}
为什么程序结束时没有调用drop()?我的想法是不是错了,我应该换一种方式吗?
【问题讨论】:
-
所以正如文档所说:“静态可能不包含任何析构函数。”,当过程结束时我应该如何运行一些代码。我想我可以让它工作,但有什么建议吗?