static_cast from和to void *没有按预期工作

时间:2015-10-29 11:30:39

标签: c++ casting scope static-cast

我试图将矢量投射到void*并返回。 该课程为glm::vec3

我正在做的是:

glm::vec3 a = glm::vec3(10,10,10);
void* b = static_cast<void*>(&a);
glm::vec3 new_a = *static_cast<glm::vec3*>(b);

现在,如果我在同一范围内执行这些操作,没问题,anew_a是相同的。但是,如果我将void*保存在类属性中,然后尝试将其转换回另一个函数中的vec3,则从glm::vec3转换为void*现在错了a!=new_a

你知道为什么会这样吗?它可能与glm::vec3的范围有关吗?

1 个答案:

答案 0 :(得分:1)

您的a很可能超出范围。请考虑以下示例:

class A
{
    void foo()
    {
        glm::vec3 a = glm::vec3(10,10,10);
        _ptr = static_cast<void*>(&a);
    }

    void * _ptr;
}

我们在此处获取a的地址,将其转换为void*并存储在类字段中。到现在为止还挺好。但是,afoo()的局部变量,这意味着当foo()退出时,a将被删除,_ptr将成为悬空指针。< / p>