为什么这个地址是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(默认)捕获对象:

[=](){