深入研究析构函数

本文深入探讨了在DLL环境中,由于FreeLibraryAndExitThread导致析构函数无法正常执行的问题。通过全局变量g_hinst示例,揭示了析构函数在函数结束时不被调用的状况,并提出使用嵌套作用域来确保析构函数的执行。
摘要由CSDN通过智能技术生成
       析构函数是C++中一个神奇的部分,在调用析构函数时,并不需要像普通函数一样写出函数调用的代码,而是由编译器将析构函数插入到程序中合适的调用地方。如果你不清楚这些插入析构函数的地方,就会出现一些很难解决的错误。
   
    在分析析构函数的执行时,一个经典的示例是全局变量的析构过程。我们来考虑下面的代码:
    

  
    当运行这个程序时,将会在调用g_pUnKnow的析构函数时发生崩溃。其中的原因是:全局变量的析构函数是主程序退出时才调用的,而在主程序退出时,COM环境也将被卸载。COM的卸载工作包括释放在初始化COM环境时所加载的动态链接库。然后当你释放全局变量指针时,程序将崩溃,因为程序试图与一个不存在的DLL通信。         这个问题并不仅限于全局变量,有时候局部变量也会出现这样的情况:
   

 
    这段程序非常简单,在代码中有一个错误。智能指针的析构函数在什么时候被调用?答
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值