为什么"删除*这个"会编译?

Ben*_*oit 8 c++ mfc compilation

我从MFC派出一个类CDialogEx:

class MyDialog : public CDialogEx
{
  public:
    virtual void PostNcDestroy();
    …
  …
};
Run Code Online (Sandbox Code Playgroud)

我实施PostNcDestroy 如下:

void MyDialog::PostNcDestroy()
{
    CDialogEx::PostNcDestroy();
    delete *this; // oops, typo
}
Run Code Online (Sandbox Code Playgroud)

我很惊讶地看到这段代码编译(使用VC120或Visual Studio 2013),并且根本不会产生任何警告.任何人都可以告诉为什么会这样吗?

谢谢.

mol*_*ilo 8

这是一种隐含的转换; 该类CWnd具有operator HWND()转换函数,并且HWND是指针类型.

删除这HWND是一个错误,但编译器不知道并且无法警告您.