Yas*_*azk 14 c++ static pointers initialization
我有一个带有静态成员的类,它是一个像这样的指针:
animation.h
class Animation
{
public:
Animation();
static QString *m;
};
Run Code Online (Sandbox Code Playgroud)
animation.cpp
#include "animation.h"
QString* Animation::m = 0;
Animation::Animation()
{
}
Run Code Online (Sandbox Code Playgroud)
当我尝试从另一个类初始化那个'm'指针时:
Animation::m = new QString("testing");
Run Code Online (Sandbox Code Playgroud)
有用.
但是当我这样做的时候:
QString x("Testing");
Animation::m = &x;
Run Code Online (Sandbox Code Playgroud)
程序崩溃了.
第二种方法有什么问题?
此外,我希望将该静态指针设置为私有,以便我可以为其创建静态getter和setter函数.setter应该使用第二种方法,因为'x'将出现在参数中,所以我被卡住了.
谢谢你的帮助!
Luc*_*ore 14
我打赌它并没有在那条线上崩溃,而是之后.
问题是你正在获取位于自动内存中的变量的地址,并可能在之后尝试访问它.变量x将在其范围结束时被销毁,但Animation::m仍将指向该内存(在x超出范围后您不再拥有的内存).这导致未定义的行为.
就像以下是非法的:
int* x = NULL;
{
int k = 3;
x = &k;
}
*x = 4;
Run Code Online (Sandbox Code Playgroud)
解决方法分配值,而不是指针(前提是它先前已分配给有效QString*):
QString x("Testing");
*(Animation::m) = x;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35160 次 |
| 最近记录: |