Mi chiedevo se qualcuno potesse far luce sui processi di deallocazione della memoria in C++.Quando viene rilasciata la memoria in relazione a variabili statiche?
Se ho una struct che dichiaro statica, in modo tale che di costruttore è la prima cosa da eseguire e suo distruttore è l'ultima cosa da eseguire:
struct initializer execute_before_and_after_main {
initializer() { init(); }
~initializer() { cleanup(); }
}
static initializer execute_around_main;
E poi ho qualcosa di simile:
class my_class {
my_object objects[100];
}
extern my_class gobal_my_class;
my_class global_my_class;
e principale non è importante qui:
int main (int argc, char* argv[]) {
....
}
Quando cleanup()
viene chiamato, l'array objects
contiene ora una memoria deallocated/invalid? Esiste una sequenza standard di inizializzazione/distruzione che C++ implementa qui a cui qualcuno potrebbe indirizzarmi?
Grazie
EDIT: Capisco che questo tipo di codice non è forse la migliore pratica, ma sto ancora chiedendo se il comportamento è definito.
tempo per acquisire familiarità con [durata di conservazione] (http://en.cppreference.com/w/cpp/language/storage_duration) –
@CaptainObvlius lol Stavo per inserire lo stesso link nella mia risposta – aaronman
Non esiste una sequenza definita standard per l'inizializzazione e la distruzione di oggetti con durata di archiviazione statica; questo è indicato come [fiasco dell'ordine di inizializzazione statico] (http://www.parashift.com/c++-faq/static-init-order.html) – Praetorian