当用户关闭mfc应用程序时,它会自动释放其内存吗?
这是一个例子。
myapplication.h:
class myapplication: public CDialog
{
//declaring an mfc application
public:
bool isopen();// a flag which tells if the application is opened
}
mainclass.h:
#include myapplication.h
class mainclass
{
private:
myapplication* pmyapp;
public:
int openmyapp();
}
mainclass.cpp:
int mainclass::opendialog()
{
if(!pmyapp->isopen()) // this means the application was opened then closed by the user, this seems to work fine
{
// this seems to be important to make sure of a proper closing and deallocation of the memory
delete pmyapp;
pmyapp = NULL;
}
pmyapp = new myapplication();
pmyapp->Create(myapplication::IDD);
pmyapp->ShowWindow(SW_SHOW);
}
所以,如果我多次打开对话框,我会遇到DebugBreak()......
答案 0 :(得分:1)
您的操作系统(可能)会释放您忽略的任何内存。但它仍然是一个坏主意,因为如果你不释放你分配的内存并且你的应用程序运行了很长时间,迟早你就会用完。即使它只是我们正在讨论的一次性分配,如果您习惯在关机时忽略一堆内存泄漏消息,那么您将错过更重要的内容。
此外,正如评论中所提到的,如果你没有delete
类对象,那么即使操作系统最终会释放它们占用的内存,它们的析构函数也永远无法运行。
答案 1 :(得分:1)
如果您的应用程序在关闭该对话框后正在运行,是则必须销毁对象。
如果应用程序正在完成,您也应该销毁它们。但是,任何现代操作系统都会清理整个分配的内存。