Jon*_*erg 6 c c++ variables static
这是非法的/危险的吗?
int* static_nonew()
{
static int n = 5;
return &n;
}
Run Code Online (Sandbox Code Playgroud)
编译器似乎没有问题,但当其他人需要内存时,指针位置本身是否会被覆盖?
编辑:更多地解释为什么我问这个问题.注意:我用C++编程,我只是将它标记为C,因为它似乎更像是C而不是C++问题.
我有一个应该返回静态地图的类.我只希望这个地图在整个程序中初始化一次,因为似乎不需要多次执行.出于这个原因,我将会有这样的事情:
static std::map<std::string, Transition*> transitions;
static Transition trans1(transitions, ...);
static Transition trans2(transitions, ...);
return &transitions;
Run Code Online (Sandbox Code Playgroud)
Transition类构造函数会将自身添加到转换中.以这种方式,它将创建一次转换,然后返回指向它们的指针.我只记得如果你创建一个对堆栈上分配的变量的引用,它可能很容易被覆盖并且"不安全".我对函数中创建的静态变量的确切工作方式感到困惑.
这只是静态变量指针的get函数.它没有任何违法行为.它本质上不比任何其他类型的静态数据更危险.
但是静态数据:
静态存储类修饰符表示在进程的生命周期内将为此变量保留内存.