Quote:
Originariamente inviato da Opcode
Riguardo a questo problema, ti giro una nuova domanda:
e se MyClass fosse un singleton? 
|
A livello tecnico non dovrebbe cambiare niente; posto
Instance() il metodo mediante il quale richiedi l'istanza e
_instance l'istanza membro, dovresti probabilmente fare qualcosa di simile:
Codice:
MySingleton* MySingleton::Instance() {
if (_instance == 0) {
try {
_instance = new MySingleton();
}
catch (mySingletonConstructionException) {
//...
throw;
}
}
return _instance;
}
Cioè un approccio tradizionale (senza function try block), ma avendo cautela di far comportare la clausola catch come quella associata a un costruttore (cioè propagando l'eccezione: d'altra parte quella parte del metodo
Instance() è deputata alla costruzione è in caso di fallimento non ha mai senso ritornare il puntatore all'istanza).
Ovviamente, il costruttore
MySingleton::MySingleton() può avere o non avere un function try block associato: lo avrà se inizializza altri oggetti (cioè se eredita da altre classi o se inizializza membri con una sintassi constructor initializer, ossia i fatidici ":"), altrimenti conterrà semplicemente uno statement try.