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

时间:2014-02-09 12:44:03

标签: c++ visual-studio-2012 windows-7

我有这段代码:

#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。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

虽然我认为这不是一个好主意,但一种方法是创建一个全局对象并在其析构函数中添加代码。

一般而言,您应该尽可能使用RAII原则来避免内存泄漏问题。