Pat*_*ick 4 c++ windows visual-studio-2010 windows-7
在我的应用程序中,我想在最后一刻执行逻辑.越晚越好.
这样做的原因是我跟踪我的应用程序中的某些元素(数据结构,资源......),并且在应用程序结束时,例程查看这些元素并报告它们是否未正确关闭,释放,删除,...
到目前为止,我们使用了几个技巧.
第一个技巧是否决C运行时的_heap_term函数(以及C运行时的其他一些函数).优点是这非常有效,但仅限于CRT静态链接的应用程序.
第二个技巧是定义一个像这样的全局变量:
#pragma init_seg(lib)
GlobalApplicationManager s_globalApplicationManager;
Run Code Online (Sandbox Code Playgroud)
该pragma确保在所有其他全局变量之前构造此全局变量,并且 - 更重要的是 - 它在所有其他全局变量之后被破坏.这样,我们就可以将检查逻辑放在这个类的析构函数中.
问题是从Windows 7开始,在某些情况下不再调用析构函数.目前尚不清楚是什么影响了这一点,但我们确信如果我们在应用程序中成功建立Oracle连接,则不会调用它.
还有哪些其他技巧可以在应用程序中尽可能晚地执行代码?