< 返回版块

fengqi2019 发表于 2021-08-23 18:26

Tags:内存泄漏,析构

在析构方法里出现panic,导致线程中止,其他变量的析构方法无法被调用,那是不是意味着这些变量的内存没有被释放?或者线程中止时,会释放所有它的内存,所以就不存在内存泄漏的问题?

评论区

写评论
作者 fengqi2019 2021-08-25 13:04

嗯,多谢!查找了相关资料,也写程序验证了!

--
👇
catsalwaysmeow: 刚才有一点忙,可能没说清楚。

Panic可以被设置为abort,这种情况下程序直接退出了,我们不考虑。一般情况下,Panic会导致栈展开,直到main函数或被catch_unwind这类函数捕获。这种情况下,各调用栈中的变量们的析构函数是会被调用的。即使是发生Panic的drop对应的那一个结构体内部的成员们,如果有析构函数,也会被正常调用。

所以一般情况下不用担心Panic造成内存泄露,除非你的代码中存在一些需要手动释放的东西。

catsalwaysmeow 2021-08-23 20:03

刚才有一点忙,可能没说清楚。

Panic可以被设置为abort,这种情况下程序直接退出了,我们不考虑。一般情况下,Panic会导致栈展开,直到main函数或被catch_unwind这类函数捕获。这种情况下,各调用栈中的变量们的析构函数是会被调用的。即使是发生Panic的drop对应的那一个结构体内部的成员们,如果有析构函数,也会被正常调用。

所以一般情况下不用担心Panic造成内存泄露,除非你的代码中存在一些需要手动释放的东西。

catsalwaysmeow 2021-08-23 19:27

如果是引发栈展开的panic,且这个drop对应的struct没有被用于手动管理内存资源,不会。

1 共 3 条评论, 1 页