【发布时间】:2021-11-04 22:13:39
【问题描述】:
在我的 .h 文件中:
extern std::vector<bool*> selectedContainer;
inline void InitSprite(Sprite* sprite)
{
bool* selected = new bool(false);
sprite->onMouseHover = [&](){
*selected = true;
};
sprite->onMouseNotHover = [&](){
*selected = false;
};
selectedContainer.push_back(selected);
}
例如,如果传递的精灵的 onMouseHover 被调用。选择的指针始终为 0xFFFFFFFF。
【问题讨论】:
-
您的 lambdas 应该按值捕获,而不是按引用捕获。
-
非常感谢。为什么引用不起作用?
-
因为它捕获了对
selected的引用,当函数返回时该引用被销毁,所以引用变为悬空。 -
通过引用捕获是可以的,只要 lambda 只是本地的并且不会转义。在这段代码中,lambdas 转义(因为它们被设置为外部对象)。
-
OT:指向 bool 的指针向量对我来说看起来很错误,为什么不只存储 bool 呢?喜欢
std::vector<bool*>->std::vector<bool>。