如果一个Rust程序发生恐慌,并且假设没有恐慌捕获程序(暂时没有),那么运行析构函数并让操作系统在进程后进行清理肯定是安全的。为什么Rust会解开线程?
我能想到的唯一原因是,当没有操作系统来回收内存时,除了那个利基外,似乎没必要。
答案 0 :(得分:4)
你的问题有一个错误的前提:它预先假定使用析构函数的唯一原因是清理当前进程的资源。
这确实是最常见的用法,但它不是唯一的用法。
例如,我完全可以想象TCP连接的析构函数会尝试发送关闭消息:最快的连接关闭,最快的资源在另一端释放。当然,它只是最好的努力(在中止/崩溃的情况下,析构函数永远不会运行),但它仍然是值得的。
答案 1 :(得分:1)
如果Rust程序发生恐慌[...],请在进程后让操作系统清理干净。
当线程发生混乱时,整个进程不需要退出。在这些情况下,析构函数运行是好的。
在其他情况下,Drop
实现用于执行"回滚"代码的一些关键部分。
假设没有恐慌的捕手(有一段时间没有恐慌)
但now there are,所以我不清楚你为什么提起它。