谢谢指点!
【 在 z16166 (Netguy) 的大作中提到: 】
: 标 题: Re: 函数体内的变量的析构函数什么时候会被调用?
: 发信站: 水木社区 (Thu Aug 6 14:19:19 2020), 站内
:
: C++析构的调用时机是确定的,
: 正常就是退出变量的scope时调用,也就是fun1返回之前。
: 异常情况下就是unwind时调用,前提是捕捉到异常并触发了unwind操作。
:
: 异常分为os异常和c++异常,c++异常用try/catch就能捕捉处理。
: 所以你担心的是os异常?
:
: os异常的处理自然和os有关,你的是啥os?
:
: windows上用SEH/VEH都可以处理,简单点用SEH,就是VC++特有的关键字__try{ } __except{ } __finally{ },
: 但这些关键字和c++对象不能共存于同一层函数中,只能用于纯C的代码,所以如果有c++对象,需要额外再包一层函数。
: vc++对catch(...)可以做特殊处理,同时捕捉c++异常、OS异常。
:
https://docs.microsoft.com/en-us/cpp/build/reference/eh-exception-handling-model?view=vs-2019:
:
: 【 在 capriccio 的大作中提到: 】
: : 我说异常情况主要还是想说明我问这个问题的目的。
: : 比如fun1和fun2都里用到了某个资源,我需要在fun1出现任何异常退出后在fun2开始之前这个资源都会被释放。所以我就想整一个类,类的构造函数申请资源,析构函数释放资源。在fun1里一开始就声明一个这个类的对象,fun1不管时正常退出还是异常退出,都能保证资源释放。但我不确定这个析构函数什么时候被调用,是不是像垃圾回收那样不能确定具体时间,所以问了这个问题。
: : 也不知道要实现我这个目的还有没有更好的办法(似乎标准库里一堆xxxptr的类可以干这个?但我对使用这些类没有安全感,因为看简单的文档还是很多细节不清楚,能讲清各种细节的文档看着太费劲,不如自己造轮子)
: : ...................
:
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 125.33.231.*]
--
FROM 121.69.95.*