DLL中的Delete问题
我创建了一个对话框导出类封装在扩展DLL中,里面没有资源,只是为了处理数据与
继承使用,然后在主程序中创建了该导出类的子类,并创建一个无模式对话框如下:
EXPA.DLL中:
CExamDlg为导出类
其中有在OnClose()中
{
...
DestoryWindow();
delete this;
}
导出函数中:
bool ShowDlg(CExamDlg* pDlg,UINT nIDD)
{
pDlg->Create(nIDD,NULL);
pDlg->ShowWindow(SW_SHOW);
return true;
}
主程序中
CDlgB:public CExamDlg
然后
CDlgB* pDlg = new CDlgB();
ShowDlg(pDlg,CDlgB::IDD);
大家看到显示对话框是在底层,那么问题来了,
在关闭对话框时对话框调用OnClose(),在这个函数最后我delete this;
可是这个指针是在主程序中new的,现在要在DLL中进行delete,有什么隐患吗?
实际应用时发现没崩溃,但是new是在堆中分配的吧,主程序的堆和DLL中的堆
是一个地方吗?
delete时DLL中的父类并不知道子类的实际大小,不会出现泄露吗?
如果是DLL中的NEW的东东,在主程序中可以测试出会出现问题,反过来就可以吗?
这是什么道理?
请大家指点一下。