C++,Win32:如何在 main() 退出后调用函数

C++, Win32: How Do I Call a Function After Main() Exits

本文关键字:退出 函数 调用 main Win32 C++      更新时间:2023-10-16

我有这个代码:

#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 原则来避免内存泄漏问题。