我在我的包含实例中添加一个按钮,如下所示:

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的情况。

10-08 04:46