fengqi2019 发表于 2021-08-23 18:26
Tags:内存泄漏,析构
在析构方法里出现panic,导致线程中止,其他变量的析构方法无法被调用,那是不是意味着这些变量的内存没有被释放?或者线程中止时,会释放所有它的内存,所以就不存在内存泄漏的问题?
嗯,多谢!查找了相关资料,也写程序验证了!
-- 👇 catsalwaysmeow: 刚才有一点忙,可能没说清楚。
Panic可以被设置为abort,这种情况下程序直接退出了,我们不考虑。一般情况下,Panic会导致栈展开,直到main函数或被catch_unwind这类函数捕获。这种情况下,各调用栈中的变量们的析构函数是会被调用的。即使是发生Panic的drop对应的那一个结构体内部的成员们,如果有析构函数,也会被正常调用。
abort
main
catch_unwind
drop
所以一般情况下不用担心Panic造成内存泄露,除非你的代码中存在一些需要手动释放的东西。
刚才有一点忙,可能没说清楚。
如果是引发栈展开的panic,且这个drop对应的struct没有被用于手动管理内存资源,不会。
评论区
写评论嗯,多谢!查找了相关资料,也写程序验证了!
--
👇
catsalwaysmeow: 刚才有一点忙,可能没说清楚。
Panic可以被设置为
abort
,这种情况下程序直接退出了,我们不考虑。一般情况下,Panic会导致栈展开,直到main
函数或被catch_unwind
这类函数捕获。这种情况下,各调用栈中的变量们的析构函数是会被调用的。即使是发生Panic的drop
对应的那一个结构体内部的成员们,如果有析构函数,也会被正常调用。所以一般情况下不用担心Panic造成内存泄露,除非你的代码中存在一些需要手动释放的东西。
刚才有一点忙,可能没说清楚。
Panic可以被设置为
abort
,这种情况下程序直接退出了,我们不考虑。一般情况下,Panic会导致栈展开,直到main
函数或被catch_unwind
这类函数捕获。这种情况下,各调用栈中的变量们的析构函数是会被调用的。即使是发生Panic的drop
对应的那一个结构体内部的成员们,如果有析构函数,也会被正常调用。所以一般情况下不用担心Panic造成内存泄露,除非你的代码中存在一些需要手动释放的东西。
如果是引发栈展开的panic,且这个drop对应的struct没有被用于手动管理内存资源,不会。