Является ли это незаконным / опасным?
int* static_nonew()
{
static int n = 5;
return &n;
}
Кажется, что с этим у компилятора нет проблем, но защищено ли расположение указателя от перезаписи, когда кому-то еще нужна память?
РЕДАКТИРОВАТЬ: немного больше объяснения, почему я задал этот вопрос.Примечание: я программирую на C ++, я просто пометил его как C, потому что это было больше похоже на вопрос C, чем C ++.
У меня есть класс, который должен возвращать статическую карту.Я хочу, чтобы эта карта инициализировалась один раз в программе, так как нет необходимости делать это несколько раз.По этой причине я собирался получить что-то вроде этого:
static std::map<std::string, Transition*> transitions;
static Transition trans1(transitions, ...);
static Transition trans2(transitions, ...);
return &transitions;
Конструктор классов переходов добавит себя к переходам.Таким образом, он будет создавать переходы один раз и затем возвращать указатель на них.Я просто помню, что если вы создадите ссылку на переменную, расположенную в стеке, она может быть очень легко перезаписана и «небезопасна».Я просто немного запутался, как именно работают статические переменные, созданные внутри функции.