You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WNDCLASS(EX)中lpszClassName的预期生命周期及代码有效性疑问

WNDCLASSEX局部类名写法的有效性分析

在C++中创建窗口类时,常见写法是直接用字符串字面量赋值给lpszClassName:

WNDCLASSEX wndClass {};
wndClass.lpszClassName = "MyWndClass";

这种写法的可靠性源于字符串字面量的存储特性——它会被放在程序的全局数据区,生命周期覆盖整个程序运行期间。

那如果用仅在RegisterClassEx调用期间有效的局部数组作为类名,比如下面的代码:

{
  char className[] = "MyWndClass";

  WNDCLASSEX wndClass {};
  wndClass.lpszClassName = className;
  // 其他初始化操作...

  RegisterClassEx(&wndClass);
}

HWND window = CreateWindowEx(0, "MyWndClass", /* 其他参数... */);

这种写法是完全有效的。原因在于:

  • Windows系统调用RegisterClassEx时,会复制lpszClassName指向的字符串内容到自身内部的类信息存储区,而不是保存这个指针本身。
  • 当局部作用域结束,className数组被销毁,但系统已经留存了类名的副本。后续调用CreateWindowEx时,传入的字符串字面量"MyWndClass"会和系统存储的类名副本匹配,完全可以正常找到并使用这个窗口类。

内容的提问来源于stack exchange,提问作者itzjackyscode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:55:18