Domanda

Ho una classe Message che analizza i messaggi di testo usando le tabelle di ricerca. Ricevo molti messaggi e creo e distruggo molti oggetti, quindi ho pensato di dichiarare quelle tabelle di ricerca come membri statici per impedire l'inizializzazione delle stesse tabelle con gli stessi valori ancora e ancora.

È l'approccio corretto o esiste un modo C ++ più appropriato?

Grazie.

È stato utile?

Soluzione

Sembra il modo giusto di farlo, anche se mi aspetto che il compilatore lo ottimizzi. Hai eseguito il benchmarking della tua applicazione e le tabelle dichiarate come statiche lo accelerano?

Si noti inoltre che se si dispone di molte tabelle di ricerca di grandi dimensioni, le prestazioni aumenteranno, ma le tabelle rimarranno sempre in memoria.

Altri suggerimenti

Se le tue classi di messaggi condividono informazioni di ricerca, può valere la pena di astrarre le tue ricerche statiche in una classe a parte in modo che vengano inizializzate solo una volta.

Ma a prescindere, i membri della classe statica sono sicuramente la strada da percorrere.

Potrebbero essere variabili di classe, ovvero statiche a livello di classe. In questo modo sono disponibili per le sottoclassi, se presenti, e forse un po 'più visibili che se "nascosto". come variabili locali statiche in singoli metodi.

Sì, tutto ok. A volte è una buona soluzione: funzione statica che verrà creata una sola volta. Inoltre potresti usare l'oggetto singleton, ma ha un'accessibilità più ampia.

Fai attenzione se hai un'applicazione multi-thread e se le tue tabelle di ricerca contengono un puntatore a un altro dato che potrebbe essere distrutto prima di questa tabella.

Anche l'uso di un modello singleton funzionerà per questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top