gpt4 book ai didi

c++ - 未初始化的类调用函数,无一异常(exception)。这里发生了什么?

转载 作者:搜寻专家 更新时间:2023-10-31 00:44:30 24 4
gpt4 key购买 nike

这是正常行为吗?这以前从未发生在我身上。我认为它会导致异常,但为什么不在这里呢?看一看。


CWindowsApplication::MsgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static CWindowApplication* pApp = NULL;

if (message == WM_NCCREATE)
{
//// retrieve Window instance from window creation data and associate
//pApp = reinterpret_cast(((LPCREATESTRUCT)lParam)->lpCreateParams);
//::SetWindowLong(hWnd, GWL_USERDATA, reinterpret_cast(pApp));

//pApp = reinterpret_cast(::GetWindowLong(hWnd, GWL_USERDATA));
}

pApp->WndProc(hWnd, message, wParam, lParam); // pApp = NULL, but it still works? I expected a exception of some sort.
}

但是,当我将类更改为其他类时,我得到了我期望的异常。这里发生了什么?在我作为一名热情的程序员 10 多年的时间里,我从未遇到过这样的事情。

最佳答案

只要 WndProc 不是虚拟的,从技术上讲,指针根本不需要取消引用即可进行调用。这并不是说当您尝试在 WndProc 中使用 this(包括使用隐式 this 调用任何虚函数)时它不会崩溃和烧毁>,但非虚拟调用通过指针的类型进行,不需要触及 vtable(或任何其他实例成员)。

关于c++ - 未初始化的类调用函数,无一异常(exception)。这里发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8569564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com