为什么这个地址是0xFFFFFFFF?
Why is this address 0xFFFFFFFF?
在我的 .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。
[&](){
&
表示lambda通过reference.
捕获其对象
bool* selected = new bool(false);
这在自动范围内声明 selected
。这意味着当此函数 returns selected
超出范围并被销毁时。请注意,这意味着 pointer 本身已被破坏,并且与指针指向的内容无关。
这个指针被 reference 捕获,所以在这个函数之后 returns 任何时候 lambda 引用捕获的对象它最终将引用一个被销毁的对象,因此会出现未定义的行为。
最简单的解决方案是让 lambdas 通过 value(默认)捕获对象:
[=](){
在我的 .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。
[&](){
&
表示lambda通过reference.
bool* selected = new bool(false);
这在自动范围内声明 selected
。这意味着当此函数 returns selected
超出范围并被销毁时。请注意,这意味着 pointer 本身已被破坏,并且与指针指向的内容无关。
这个指针被 reference 捕获,所以在这个函数之后 returns 任何时候 lambda 引用捕获的对象它最终将引用一个被销毁的对象,因此会出现未定义的行为。
最简单的解决方案是让 lambdas 通过 value(默认)捕获对象:
[=](){