如果我像这样在主窗口回调函数中声明和初始化对象:
LRESULT CALLBACK WndProc
(
HWND hWnd // handle to window of this process
, UINT msg // message constant
, WPARAM wParam // holder of message parameters
, LPARAM lParam // holder of message parameters
)
{
switch (msg)
{
case WM_CREATE:
{
std::unique_ptr<Foo> foo = std::unique_ptr<Foo>(new Foo);
}
break;
}
}
foo
消息的break
之后对象WM_CREATE
是否保持初始化?如果不是,那么[[best位置在哪里声明它,以便它的范围不受case
范围的限制?
foo
对象正在顺便在主窗口中创建控件,所以我认为要求是让它一直存在到运行时结束。我怀疑它将无法生存。我正在考虑将其声明为全局变量(但出于明显的原因我不喜欢该选项)或声明为回调函数内的静态对象(但在switch
之外)。但是也许有更好的选择我看不到,所以我正在寻求您的建议。
谢谢您的帮助!
没有foo
在}
before中断处超出范围时被销毁。
在哪里声明它的最佳位置,以便它的范围不受大小写范围的限制?
您可以在函数范围内声明它,然后从函数返回时它将被销毁。
{ std::unique_ptr<Foo> foo; switch (msg) { case WM_CREATE: { foo = std::make_unique<Foo>(); } break; } } // foo gets destroyed here
如果即使函数返回后仍需要它继续存在,则需要在函数外部声明它。您可以将其作为
LPARAM
传递给回调函数。