gpt4 book ai didi

c++ - 静态变量指针?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:10 25 4
gpt4 key购买 nike

这是非法/危险的吗?

int* static_nonew()
{
static int n = 5;
return &n;
}

编译器似乎没有问题,但是指针位置本身是否受到保护,不会在其他人需要内存时被覆盖?

编辑:更多解释我为什么问这个问题。注意:我正在用 C++ 编程,我只是将它标记为 C,因为它似乎更像是 C 而不是 C++ 问题。

我有一个应该返回静态 map 的类。我只希望在整个程序中初始化此 map 一次,因为似乎不需要多次执行此操作。出于这个原因,我打算做这样的事情:

static std::map<std::string, Transition*> transitions;
static Transition trans1(transitions, ...);
static Transition trans2(transitions, ...);
return &transitions;

Transition 类的构造函数会将自己添加到转换中。这样,它将创建一次转换,然后返回指向它们的指针。我只记得如果您创建对分配在堆栈上的变量的引用,它很容易被覆盖并且是“不安全的”。我对在函数中创建的静态变量究竟如何工作感到有点困惑。

最佳答案

这只是一个获取静态变量指针的函数。这没有什么违法的。它本质上并不比任何其他类型的静态数据更危险。

但是静态数据:

  1. 建立紧密耦合
  2. 阻碍重新进入
  3. 为细微错误创造机会
  4. 通常是弱设计的标志
  5. 应该非常明智地使用

static 存储类修饰符意味着在进程的生命周期内将为该变量保留内存。

关于c++ - 静态变量指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3339984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com