为什么“删除*this”会编译
Why does “delete *this” ever compile?
我正在从MFC派生一个类CDialogEx
:
class MyDialog : public CDialogEx
{
public:
virtual void PostNcDestroy();
…
…
};
我实现了这样的PostNcDestroy
:
void MyDialog::PostNcDestroy()
{
CDialogEx::PostNcDestroy();
delete *this; // oops, typo
}
我很惊讶地看到这段代码编译(使用 VC120 或 Visual Studio 2013(,并且根本没有生成任何警告。谁能说出为什么会这样?
谢谢。
这是一个隐式转换;类CWnd
具有operator HWND()
转换函数,HWND
是指针类型。
删除该HWND
是一个错误,但编译器不知道这一点,也无法警告您。
为什么"删除*this"会编译?
可以编写一个简单的 mcve 来重现您询问的行为:
struct foo {
operator int*() {
return nullptr;
}
void bar() {
delete *this;
}
};
int main() {
foo f;
f.bar();
}
这是因为foo
可以隐式转换为指针类型。您的班级也可能是这种情况。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么使用 "this" 指针调用派生成员函数?
- 二叉排序树无法编译
- 编译时未启用intel oneApi CUDA支持
- 编译错误:2 个重载没有'this'指针的合法转换。使用结构
- 编译 CPP 应用程序时出错。 "error: 'posix_memalign' was not declared in this scope"
- 编译错误 C++ "was not declared in this scope" "expected type specifier"等
- 尝试编译我的 wxWidgets 程序时出错"is_enum not declared in this scope"
- 编译 c++ 代码会产生错误"‘nameWindow’ was not declared in this scope"
- 为什么“删除*this”会编译
- 科学实验室编译"cannot allocate this quantity of memory"
- 在结构构造函数中使用"this"关键字编译错误?-C++
- 由于错误"'isblank' was not declared in this scope" Mingw 无法编译
- "Function not declared in this scope" 编译 openCV 代码时出错
- "error: 'avcodec_open' was not declared in this scope"尝试编译untrunc
- c++:为什么可以编译?(处理this-Reference到基类)
- C++ gcc和Visual Studio的不同编译错误,'within this context'
- G++ 编译错误"... is protected from within this context"而 clang 没有错误
- 编译错误:在此上下文中无法隐式捕获'this'
- VS2015的多处理器编译在运行cl时会产生"not enough quota is available to process this command".exe