静态变量指针?

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类构造函数会将自身添加到转换中.以这种方式,它将创建一次转换,然后返回指向它们的指针.我只记得如果你创建一个对堆栈上分配的变量的引用,它可能很容易被覆盖并且"不安全".我对函数中创建的静态变量的确切工作方式感到困惑.

Ama*_*9MF 6

这只是静态变量指针的get函数.它没有任何违法行为.它本质上不比任何其他类型的静态数据更危险.

但是静态数据:

  1. 创造紧密耦合
  2. 妨碍重新入侵
  3. 为微妙的错误创造机会
  4. 往往是设计薄弱的标志
  5. 应该非常明智地使用

静态存储类修饰符表示在进程的生命周期内将为此变量保留内存.


Nil*_*nck 5

这是有效的代码,很有用.

很多单身工厂都是这样建造的.