2017-02-01 7 views
-3

Dies sollte für viele C++ - Experten eine ziemlich einfache Frage sein.Wird der Code nach dem CATCH-Block ausgeführt?

Ich habe einige C++ - Code wie unten.

BOOL FindNumbersInObj() { 

    BOOL ret = true; 

    try { 
     //Do bunch of things here... 
     CMyObj pObj; 

     try { 
      pObj->GetMyObjectPtr(); 
     } 
     catch (MyException ex) { 
      pObj = NULL; 
      ret = false; 
     } 
     ret = pObj->GetAllNumbers(); 
     //Do something here too.... 
    } 
    catch (MyException ex) { 
     //Log Error Message 
     ret = false; 
    } 
    return ret; 
} 

Wie Sie sehen, gibt es ein TRY in einem anderen TRY. Im CATCH wird pObj auf NULL gesetzt. Also ist es möglich, dass es aus dem CATCH-Block herauskommt und die Codezeile "ret = pObj-> GetAllNumbers();" ausführt? Wenn dies der Fall ist, würde ich den Code zum Absturz bringen.

Dies ist etwas leagcy/alten Code zu betrachten. Bitte geben Sie Ihre Meinung über TRY in einem anderen TRY.

Und auch, wenn es einen CATCH Block trifft, wird es bis zum Ende der Funktion gehen und return ret anrufen?

+2

Könnten Sie bitte Ihren Einzug korrigieren? –

+0

'BOOL' ist nicht in C++ 11. Du meinst wahrscheinlich 'bool' –

+0

@BasileStarynkevitch: Wahrscheinlich mit alten Microsoft-Typ-Aliasen –

Antwort

6

Also ist es möglich, dass es aus dem CATCH-Block kommen und die Codezeile ausführen?

Ja.

Wenn dies der Fall ist, dann würde [ich] erwarten, dass der Code abstürzt.

Ich auch.

Und auch wenn es einen CATCH Block trifft, wird es bis zum Ende der Funktion gehen und return zurückrufen?

Ja.

+4

Sie könnten es gerade getestet haben. –

+0

Ich habe keine Möglichkeit, es zu testen, da es sich um ein kaputtes Stück Code handelt, das nicht erstellt werden kann. –

+3

@DonK: Warum kümmert es dich, was es tut, wenn es so kaputt ist, dass es nicht baut? Es macht nichts! –

Verwandte Themen