C++,Win32:如何在 main() 退出后调用函数
C++, Win32: How Do I Call a Function After Main() Exits
我有这个代码:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
MyEditor myEditor;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
while(true)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT)
{ break; }
TranslateMessage(&msg);
DispatchMessage(&msg);
myEditor.Update();
}
}
return 0;
}
我想在main()退出后立即运行这个函数:
_CrtDumpMemoryLeaks();
原因是,如果我在返回 0 行之前调用此函数,则尚未调用"myEditor"析构函数,并且我收到大量内存泄漏警报。因此,我想在我的类析构函数被调用以真正检查是否有任何泄漏之后调用它。
我试过:
void CheckLeaks(void)
{
_CrtDumpMemoryLeaks();
}
//And inside the Main() block:
atexit(CheckLeaks);
但是没有工作(实际上它可能已经工作了,但我的类析构函数可能还没有被调用)。我知道我可以把我的类放在 Main() 块中并进行检查,但是该类必须处理来自 MessageProc 的输入和命令,所以我现在真的需要全局它。
操作系统是Windows 7(我找到了一些相关的东西,但似乎它仅适用于Linux),IDE是Visual Studio 2012。
我该怎么做?
虽然我认为这不是一个好主意,但一种方法是创建一个全局对象并在其析构函数中添加代码。
不过,一般来说,您应该尽可能使用 RAII 原则来避免内存泄漏问题。
相关文章:
- 构造函数在退出函数时无法初始化一个参数
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++从另一个函数退出函数
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++::在构造函数退出之前通过指针调用成员函数
- JsonCpp在退出函数时抛出LogicError
- 从函数打印 CLI 帮助消息后,我应该如何干净地退出 C++ 程序?
- 如何退出函数,但继续程序的其余部分
- C++ 调试递归函数,它不会立即退出函数
- 存储在全局变量中的函数指针在进入函数时设置为 0,并在退出函数时返回到以前的状态
- 退出函数后,节点不保存
- C++:退出函数时指针值已更改
- 如何在 C++ 中退出函数的 while 循环
- 默认退出函数实现
- 粘住数据并创建一个退出函数
- 退出函数的可能性
- 如何退出函数,但不退出main()
- 为什么退出函数时节点值发生了变化
- 其中是MFC应用程序的退出函数
- c++中带有返回语句的退出函数