我在我的包含实例中添加一个按钮,如下所示:
pPromptDlg->addBtn("Okay", [](int &loopState) {
loopState = GlobalDefs::kGameRequestingBack;
}, true);//true because it handles the "back" button
我将要设置它的包含实例的
int
成员(为enum
值),指示不再需要它,但这很麻烦并且可能很危险,所以我宁愿尝试pPromptDlg->addBtn("Okay", [](int &loopState) {
loopState = GlobalDefs::kGameRequestingBack;
delete pPromptDlg;
pPromptDlg = nullptr;
}, true);
然后,我可以仅检查
if (pPromptDlg)
并将其保留。我知道lambda可以有效地设置一个类,就像
enum
类一样,但是enum
要求解析包含其定义的类,因此我猜测删除lambda中的该类的实例会有副作用吗?这可能还是懒惰?谢谢。
最佳答案
当然,您只需要捕获pPromptDlg
即可:
pPromptDlg->addBtn("Okay", [&pPromptDlg](int &loopState) {
// ^^^^^^^^^^^ by reference, so that...
loopState = GlobalDefs::kGameRequestingBack;
delete pPromptDlg;
pPromptDlg = nullptr; // <-- ... this line does something meaningful*
}, true);
*“有意义”是指通过引用捕获可以将lambda外部的
pPromptDlg
设置为nullptr
。但是,即使在按值捕获中,该行仍然有用,因为它可以很好地处理多次调用lambda的情况。