2010-11-23 9 views
9

que esperaba Visual Studio para dame un error o por lo menos una advertencia, pero me dio ni cuando tuve un vacío return en el constructor:retorno vacío en Constructor

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

    // continue with other code 
} 

no he visto uso de esto hasta ahora en mi experiencia limitada, entonces mi pregunta es si está bien tener una devolución en el constructor?

Esto es más una pregunta de curiosidad porque entiendo que es muy fácil codificar para que nunca tenga que poner el retorno allí, aunque tengo una instancia en la que esto sería muy útil, pero antes de usarlo Quiero ver si está prohibido (quizás por el estándar o, en general, no es una buena idea).

Respuesta

11

Las normas dicen:

12.1 constructores
...
Una instrucción de retorno en el cuerpo de un constructor no especificará valor de retorno. No se tomará la dirección de un constructor .
...

Es bien tener return; en un constructor. Tengo entendido que esto fue permitido para que el programador pueda regresar temprano del constructor sin la necesidad de hacer un lío con indicadores booleanos.

5

Está bien. Significa que el objeto se ha construido con éxito. No debe morder si sigue los consejos generales de inicialización de las variables miembro en la lista de inicializadores. Es similar al inocente código siguiente.

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