我有一个带有静态成员的类,它是一个指针,如下所示:
动画.h
class Animation
{
public:
Animation();
static QString *m;
};
动画.cpp
#include "animation.h"
QString* Animation::m = 0;
Animation::Animation()
{
}
当我尝试从另一个类初始化“m”指针时,如下所示:
Animation::m = new QString("testing");
有用。
但是当我这样做时:
QString x("Testing");
Animation::m = &x;
程序崩溃了。
第二种方法有什么问题吗?
另外,我希望将该静态指针设为私有,这样我就可以为其创建静态 getter 和 setter 函数。设置器应该使用第二种方法,因为“x”将出现在参数中,所以我陷入困境。
谢谢你的帮助!
我敢打赌它不会在那条线上崩溃,而是在那之后崩溃。
问题是您正在获取位于自动内存中的变量的地址,并且之后可能尝试访问它。变量x
当它的作用域结束时将会被销毁,但是Animation::m
仍将指向该内存(之后您不再拥有的内存x
超出了范围)。这导致未定义的行为.
就像下面这样是非法的:
int* x = NULL;
{
int k = 3;
x = &k;
}
*x = 4;
解决方法分配给值,而不是指针(前提是它之前已分配给有效的QString*
):
QString x("Testing");
*(Animation::m) = x;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)