È illegale/pericoloso?Puntatore variabile statico?
int* static_nonew()
{
static int n = 5;
return &n;
}
Il compilatore non sembrano avere un problema con esso, ma è la posizione del puntatore per sé protetti dalla sovrascrittura quando qualcun altro ha bisogno di memoria?
EDIT: Un po 'più di una spiegazione del perché ho fatto questa domanda. Nota: sto programmando in C++, l'ho appena etichettato come C perché sembrava essere più di una domanda C che C++.
Ho una classe che dovrebbe restituire una mappa statica. Voglio solo che questa mappa sia inizializzata una volta durante il programma in quanto non sembra esserci la necessità di farlo più volte. Per questo motivo, stavo per avere qualcosa di simile:
static std::map<std::string, Transition*> transitions;
static Transition trans1(transitions, ...);
static Transition trans2(transitions, ...);
return &transitions;
Il costruttore di classi di transizione si aggiungerebbe alle transizioni. In questo modo, creerebbe le transizioni una volta e quindi restituirà loro un puntatore. Ricordo solo che se si crea un riferimento a una variabile allocata nello stack, questo potrebbe essere sovrascritto molto facilmente ed era "non sicuro". Ero solo un po 'confuso con esattamente come funzionano le variabili statiche create all'interno di una funzione.
Se non è previsto che la mappa venga modificata dal codice client, è necessario restituire un riferimento const o un puntatore a un const. Ciò eliminerà la maggior parte dei rischi associati ai dati statici. –