我要释放new申请的内存,但是MFC自动生成的对话框类里没有析构函数,我自己申明了一个,但是却不管用,退出的时候析构函数并没有被调用。因为我在析构函数里的TRACE()并没有输出结果。这是为什么?
我这样声明的:
class CCpuDlg : public CDialog
{
// Construction
public:
virtual ~CCpuDlg();
//...........
}
退出时这个函数没有被调用,不申明为虚拟的也没有调用
我这样声明的:
class CCpuDlg : public CDialog
{
// Construction
public:
virtual ~CCpuDlg();
//...........
}
退出时这个函数没有被调用,不申明为虚拟的也没有调用
解决方案 »
- Tab标签
- InvalidateRect和Invalidate
- 如何实现特定区域不透明?
- 游戏开发QQ群,高手来3228111
- 菜鸟想知道:(CRuntimeClass*)&(CObject::classCObject)应该如何理解?
- 编译以后通过,但在点击运行时,又出现一个对话框 one or more files are out of data or do not exist? these file need to built debug
- 寻找书籍《深入浅出MFC》
- 为何不能这样delete?
- 简单的问题,大虾看一下:)
- 关于ActiveX
- 求救RemoteData Control控件的问题
- 客户区画图保存到8位位图
你把头文件内容贴出来,或者最简单的办法,你新建一个对话框的APP,参考他自动添加的代码中的声明。
释放: delete []mem_bg;
delete []mem_obj;
delete []mem_buff;
问题是,函数编译和执行都没错,但是析构函数在退出饿时候根本就没进去。设了断点的,没进去。
很怀疑你是否实例化了一个CCpuDlg 对象
参考:
CAddGuide::CAddGuide(CWnd* pParent /*=NULL*/)
: CDialog(CAddGuide::IDD, pParent)
{
m_pInfo = NULL;
m_Speed = "115200";
m_Progress = new IProgressPlugin();
}CAddGuide::~CAddGuide()
{
delete m_pInfo;
if(m_Progress != NULL)
{
delete m_Progress;
}
}
CCpuDlg::~CCpuDlg()
{
delete []mem_bg;
delete []mem_obj;
delete []mem_buff;
TRACE("退出时调用析构函数");
}
退出时并没有TRACE
CCpuDlg dlg;
if (dlg.DoModal() == IDOK)
.....如果是这样写的话,他会在initinstance函数返回的时候才会调用CCpuDlg的析构函数,所以你得等到该程序执行完成时才看得到