Quando uso variabili statiche in C++, spesso finisco per voler inizializzare una variabile passandone un'altra al suo costruttore. In altre parole, voglio creare istanze statiche che dipendono l'una dall'altra.Ordine di inizializzazione statico C++
All'interno di un singolo file .cpp o .h questo non è un problema: le istanze verranno create nell'ordine in cui sono dichiarate. Tuttavia, quando si desidera inizializzare un'istanza statica con un'istanza in un'altra unità di compilazione, l'ordine sembra impossibile da specificare. Il risultato è che, a seconda del tempo, può succedere che sia costruita l'istanza che dipende da un'altra, e solo successivamente viene costruita l'altra istanza. Il risultato è che la prima istanza è inizializzata in modo errato.
Qualcuno sa come garantire che gli oggetti statici vengano creati nell'ordine corretto? Ho cercato a lungo una soluzione, provandone tutte (compresa la soluzione Counter Schwarz), ma comincio a dubitare che ce ne sia una che funzioni davvero.
Una possibilità è il trucco con il membro funzione statica:
Type& globalObject()
{
static Type theOneAndOnlyInstance;
return theOneAndOnlyInstance;
}
In effetti, questo funziona. Purtroppo, devi scrivere globalObject(). MemberFunction(), invece di globalObject.MemberFunction(), risultante in un codice client un po 'confuso e poco elegante.
Aggiornamento: Grazie per le vostre reazioni. Purtroppo, sembra proprio che abbia risposto alla mia stessa domanda. Credo che dovrò imparare a conviverci ...
_I casi verranno creati nell'ordine in cui sono are_ ** ** definito –