为什么发生恐慌时析构函数会运行?

Tim*_*ger 1 destructor memory-management rust exception-safety

如果 Rust 程序发生恐慌,并且假设没有恐慌捕捉器(有一段时间没有),那么不运行析构函数并让操作系统在该过程后进行清理肯定是安全且良好的。Rust 为什么要展开线程?

我能想到的唯一原因是当没有操作系统来回收内存时,但除了这个利基之外,它似乎没有必要。

Mat*_* M. 5

您的问题有一个错误的前提:它预先假设使用析构函数的唯一原因是清理当前进程的资源。

这确实是最常见的用法,但不是唯一的用法。

例如,我可以完美地想象 TCP 连接的析构函数会尝试发送关闭消息:连接越快关闭,另一端就越快释放资源。当然,这只是尽最大努力(在中止/崩溃的情况下,析构函数永远不会运行),但它仍然是值得的。