创建新的 CMFCDesktopAlertWnd 时,何时删除分配的内存
When creating a new CMFCDesktopAlertWnd, when is the allocated memory deleted?
有关如何创建桌面警报的大多数示例如下所示。它使用 new 关键字创建一个新的 CMFCDesktopAlertWnd,用于创建 CMFCDesktopAlertDialog。这些示例都没有删除函数末尾的对象,因此我想有些东西正在解除分配内存。什么在解除分配内存?
CMFCDesktopAlertWnd* pPopup = new CMFCDesktopAlertWnd;
// int m_nAnimation
pPopup->SetAnimationType ((CMFCPopupMenu::ANIMATION_TYPE) m_nAnimation);
// int m_nAnimationSpeed
pPopup->SetAnimationSpeed (m_nAnimationSpeed);
// int m_nTransparency
pPopup->SetTransparency ((BYTE)m_nTransparency);
// BOOL m_bSmallCaption
pPopup->SetSmallCaption (m_bSmallCaption);
// BOOL m_bAutoClose, int m_nAutoCloseTime
pPopup->SetAutoCloseTime (m_bAutoClose ? m_nAutoCloseTime * 1000 : 0);
// int m_nPopupSource
if (m_nPopupSource == 0)
{
// int m_nVisualMngr
// CPoint m_ptPopup
// The this pointer points to a CDesktopAlertDemoDlg class which extends the CDialogEx class.
if (m_nVisualMngr == 5) // MSN-style
{
pPopup->Create (this, IDD_DIALOG2, NULL, m_ptPopup, RUNTIME_CLASS (CMSNDlg));
}
else
{
pPopup->Create (this, IDD_DIALOG1,
m_menuPopup.GetSubMenu (0)->GetSafeHmenu (), m_ptPopup, RUNTIME_CLASS (CMyPopupDlg));
}
}
你可以看看源代码:
void CMFCDesktopAlertWnd::OnNcDestroy()
{
CWnd::OnNcDestroy();
delete this;
}
销毁窗口后,WM_NCDESTROY消息将删除分配的内存。
Microsoft建议删除这属于PostNcDestroy()
而不是OnNcDestroy()
方法,并且我一直看到一些崩溃,其中comctl32!ComboBox_WndProc()
试图在删除时引用释放的内存过早完成,即在OnNcDestroy().
相关文章:
- 将数组的地址分配给变量并删除
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 在程序变得低效之前,允许多少新的[]和删除[]分配是否有限制?
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 如何在C++中为增加但记住删除先前对象的对象分配唯一标识符
- 删除分配的 (?) 指针时"Pointer being freed was not allocated"
- 如何在析构函数中删除C++中动态分配的数组?
- 无法删除布尔动态内存分配
- 为什么删除分配的阵列会导致内存错误?
- 使用卷曲支架从堆栈中删除分配
- 破坏者未删除分配的内存
- 有没有一种方法可以全局填充新分配/删除分配
- 函数返回后,如何删除分配的变量
- 如何删除分配了新的对象
- 将指针移动到其他位置后删除分配的内存
- 创建新的 CMFCDesktopAlertWnd 时,何时删除分配的内存
- 假设规则和删除分配
- 分配内存,并在删除分配之前定义NULL
- 删除分配给对象的所有内存
- 在删除分配的内存时调试断言失败