【发布时间】:2014-07-31 13:34:41
【问题描述】:
我通过引用 lambda 捕获本地 bool 值,并且第一次捕获该值时未分配该值(一些随机值)。为什么?
bool singleConfirmed=false;
button->addTouchEventListener([text, &singleConfirmed](Ref*, Widget::TouchEventType type)
{
if (type != Widget::TouchEventType::ENDED) return;
if (!singleConfirmed)
{
cocostudio::ActionManagerEx::getInstance()->playActionByName(R_tutorialDialog.c_str(), "MoveToTop");
text->setString(G_str("Tutorial_Single/Multiplayer"));
singleConfirmed=true;
return;
}
else
{
cocostudio::ActionManagerEx::getInstance()->playActionByName(R_tutorialDialog.c_str(), "SwipeToLeft");
text->setString(G_str("Tutorial_Single/Multiplayer"));
return;
}
});
【问题讨论】:
-
稍后调用按钮事件侦听器时,
singleConfirmed是否保留在堆栈中? -
不要创建自动的
bool,而是创建std::shared_ptr<bool>并按值捕获它。这将允许 lambda 保持bool活着。