我从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/

10-13 03:00