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