Ho tipicamente abituato ad attuare un pattern Singleton in questo modo perché è così facile:C'è un problema con questa implementazione singleton?
class MyClass
{
public:
MyClass* GetInstance()
{
static MyClass instance;
return &instance;
}
private:
//Disallow copy construction, copy assignment, and external
//default construction.
};
Questo sembra molto più semplice rispetto alla creazione di un puntatore di istanza statica, inizializzandolo nel file di origine, e l'utilizzo di memoria dinamica allocazione nella funzione di istanza con guardie.
C'è un lato negativo che non vedo? Mi sembra thread-safe perché penserei che il primo thread per arrivare alla prima riga provocherebbe l'istanziazione - e sembra carino e conciso. Immagino che ci sia un problema che non vedo visto che non è comune però - vorrei ricevere un feedback prima di continuare ad usarlo
È possibile restituire un MyClass e anziché un MyClass * –
Intendi, a parte il fatto che si tratta di un singleton? http: // StackOverflow.com/q/137975/10077 –
Sì, sì, so che sono un anti-pattern e dovrebbero essere evitati :) Sono ancora interessato al motivo per cui questo potrebbe non essere sicuro per i thread. So che modificare i dati del singleton: i membri dovrebbero essere protetti da mutex, ma ho pensato che la creazione tramite questa funzione sarebbe stata sicura. –