我正在从 MFC CDialogEx
派生一个类:
class MyDialog : public CDialogEx
{
public:
virtual void PostNcDestroy();
…
…
};
我实现了PostNcDestroy
as such :
void MyDialog::PostNcDestroy()
{
CDialogEx::PostNcDestroy();
delete *this; // oops, typo
}
我很惊讶地看到这段代码编译(使用 VC120 或 Visual Studio 2013),并且根本没有生成任何警告。谁能告诉我为什么会这样?
谢谢。
最佳答案
这是一个隐式转换; CWnd
类有一个operator HWND()
转换函数,HWND
是一个指针类型。
删除 HWND
是一个错误,但编译器不知道,也无法警告您。
关于c++ - 为什么 “delete *this” 会编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36692605/