最近我在关注rastertek上的教程,发现他们建议使用一种Shutdown()清理方法而不是类自己的析构函数。他们提到的原因是,在调用一些不安全的函数(如 )时,不能保证析构函数被执行ExitThread()。
但是,我怀疑当析构函数无法调用时该方法是否会被执行。事实上,你总是可以Shutdown()在调用之前调用ExitThread(),但为什么析构函数不一样呢?如果我可以在调用之前做一些事情ExitThread(),我当然也可以调用析构函数。
将清理代码放在析构函数中是否比使用其他方法来完成此任务更安全?我知道释放一些重要资源(例如关闭文件)可能需要这种单独的方法来完成任务。但是除此之外还有其他原因吗,因为教程中似乎不是这种情况?
作为记录,我知道那里有类似的问题。但那人没有得到任何答复。
将初始化移出构造函数以及将清理移出析构函数的唯一优点是当您拥有一个基类框架时,您希望在这些阶段可靠地调用虚拟方法。
由于 vtable 在构造/销毁期间发生变化,因此对虚拟函数的调用不会解析为最派生的实例。通过使用显式Initialize/Shutdown方法,您可以确保虚拟函数正确分派。
请注意,这并不是一个提倡这种方法的答案,只是一个试图找出他们建议这种方法的原因的答案!
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |