Domanda

Presto pubblicherò un articolo su il mio blog, ma prima vorrei verificare di non aver perso nulla.

Trova un esempio che mi è sfuggito e ti citerò nel mio post.

L'argomento riguarda le implementazioni Singleton non riuscite:In quali casi puoi accidentalmente ottenere più istanze di un singleton?

Finora, ho escogitato:

  • Race Condition alla prima chiamata a instance()
  • Incorporazione in più DLL o DLL ed eseguibili
  • Definizione del modello di un singleton: classi effettivamente separate

Ci sono altri modi che mi mancano, forse con l'ereditarietà?

È stato utile?

Soluzione

Se utilizzi un campo di istanza statica che inizializzi nel tuo file cpp, puoi ottenere più istanze (e un comportamento anche peggiore) se l'inizializzazione di alcuni statici/globali tenta di ottenere un'istanza del tuo singleton.Questo perché l'ordine di inizializzazione statica tra le unità di compilazione non è definito.

Altri suggerimenti

L'ereditarietà non dovrebbe essere un problema finché il ctor è privato.

Tuttavia, se non disabiliti il ​​costruttore di copia, gli utenti potrebbero copiare [non] intenzionalmente l'istanza singleton.Eredita privatamente da boost::non copiabile è il modo più semplice per evitarlo.

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