为什么申请的空间不能释放呢????

来源:百度知道 编辑:UC知道 时间:2024/05/04 22:55:27
CRightPaneFrame::CRightPaneFrame()
{
m_pEditCtrlView = new CEditCtrlView1;
m_pSplitterView = new CSplitterView1;
}

CRightPaneFrame::~CRightPaneFrame()
{
delete m_pEditCtrlView;///////////////
delete m_pSplitterView;

}

BEGIN_MESSAGE_MAP(CRightPaneFrame, CFrameWnd)
//{{AFX_MSG_MAP(CRightPaneFrame)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRightPaneFrame message handlers

BOOL CRightPaneFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class

//m_pEditCtrlView = new CEditCtrlView1;
((CView*)m_pEditCtrlView)->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_EDIT, pContext);
SetActiveView(m_pEditCtrlView)

单从代码看不出问题所在。

哪个不能释放?
m_pEditCtrlView = new CEditCtrlView1;
m_pSplitterView = new CSplitterView1;
这两个不能 delete 吗?
这里看不出什么问题

很多时候,当你new出一个CWnd对象后,想把它delete掉是比较困难的,尤其那些需要平凡删创的窗口。原因很简单,因为你不会知道这个窗口什么时候会被来自用户的命令关闭掉,这和MFC的机制有关,因为CWnd类并不是窗口本身,它仅仅是窗口句柄的持有者。当窗口被关闭之后,CWnd对象并不会被自动删除,这其实就需要我们在OnClose函数向主窗口发送消息,叫主窗口去删除CWnd对象。
就你所说的这个问题,可能与这个原因相关。不过,当一个CWnd对象被析构的时候窗口会被自动的Destroy的,所以如果你的窗口不会被频繁删创的话,你所提的问题,也无所谓。

单从代码看不出问题所在。我想可能是你别的地方用到了你动态创建的这2个对象,然后创建对象的类在析构时删除这2个对象可别的地方还在使用,所以无法删除。再有就是你动态申请的内存也有可能失败(可能性不大);还有可能就是你在别的地方释放了内存,或销毁了对象,或更改了指针等。

我觉得应该出在这2个new出来的对象是窗口对象,CreateWindow后没有DestoryWindow