2010-11-23 18 views
9

mi aspettavo di Visual Studio per darmi un errore o per lo meno un avvertimento, ma mi ha dato né quando ho avuto un vuoto return nel costruttore:vuoto ritorno nel costruttore

MyObject::MyObject() 
{ 
    if (/*some condition*/) 
    { 
     //SomeCode 
     return; 
    } 

    // continue with other code 
} 

non ho visto l'utilizzo di questo finora nella mia esperienza limitata, quindi la mia domanda è se è OK avere un ritorno nel costruttore?

Questo è più di un curiosità domanda mi pare di capire che è molto facile da codificare in modo tale che non devi mai mettere ritorno in là, anche se ho un caso in cui questo sarebbe molto utile, ma prima di usarlo Voglio vedere se è vietato (forse dallo standard o è, in generale, non è una buona idea).

risposta

11

Le norme dicono:

12.1 Costruttori
...
Una dichiarazione di ritorno nel corpo di un costruttore non specifica una valore di ritorno. L'indirizzo di un costruttore non deve essere preso.
...

E 'bene avere return; in un costruttore. La mia comprensione è che questo è stato permesso in modo che il programmatore possa tornare presto dal costruttore senza la necessità di fare casino con le bandiere booleane.

5

Va bene. Significa che l'oggetto è stato costruito con successo. Non dovrebbe morderti se segui il consiglio generale di inizializzare le variabili membro nella lista di inizializzazione. È simile al codice seguente dall'aspetto innocente.

MyObject::MyObject() { 
    if (/* something */) { 
     // SomeCode 
    } else { 
     // continue with other code 
    } 
} 
Problemi correlati