¿Esto es ilegal/peligroso?puntero estático variable?
int* static_nonew()
{
static int n = 5;
return &n;
}
El compilador no parecen tener un problema con él, sino que es la propia ubicación del puntero protegido de ser sobrescrito cuando alguien necesita memoria?
EDIT: Un poco más de una explicación de por qué hice esta pregunta. Nota: Estoy programando en C++, acabo de etiquetarlo como C porque parecía ser más una pregunta de C que de C++.
Tengo una clase que se supone que devuelve un mapa estático. Solo quiero que este mapa se inicialice una vez durante todo el programa, ya que no parece ser necesario hacerlo varias veces. Por esta razón, yo iba a tener algo como esto:
static std::map<std::string, Transition*> transitions;
static Transition trans1(transitions, ...);
static Transition trans2(transitions, ...);
return &transitions;
El constructor de clases de transición se sumaría a las transiciones. De esa forma, crearía las transiciones una vez y luego les devolvería un puntero. Solo recuerdo que si crea una referencia a una variable asignada en la pila, podría sobrescribirse fácilmente y sería "insegura". Estaba un poco confundido con exactamente cómo funcionan las variables estáticas creadas dentro de una función.
Si no se espera que su mapa sea modificado por el código del cliente, debe devolver una referencia constante o un puntero a una const. Eso eliminará la mayoría de los riesgos asociados con los datos estáticos. –