View Single Post
Old 06-08-2010, 21:58   #13
Albi89
Senior Member
 
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
Quote:
Originariamente inviato da Opcode Guarda i messaggi
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.
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.
--Gerald Weinberg
Albi89 è offline   Rispondi citando il messaggio o parte di esso