2017-02-01 3 views
-3

Для многих экспертов на C++ это должен быть довольно простой вопрос.Будет ли выполняться код после блока CATCH?

У меня есть код на C++, как показано ниже.

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; 
} 

Как вы видите, есть TRY внутри другого TRY. В CATCH он устанавливает pObj в NULL. Возможно ли, что он выйдет из блока CATCH и выполнит строку кода «ret = pObj-> GetAllNumbers();"? Если да, то я бы исключаю, чтобы сбой кода.

Это некоторый код/​​старый код, на который я смотрю. Пожалуйста, дайте свое мнение о том, что TRY внутри другого TRY.

А также, если он попадает в блок CATCH, он перейдет в конец функции и вызовет return ret?

+2

Не могли бы вы исправить ваш отступ? –

+0

'BOOL' не в C++ 11. Вероятно, вы имеете в виду 'bool' –

+0

@BasileStarynkevitch: Возможно, используя старые псевдонимы типа Microsoft –

ответ

6

Возможно ли, что он выйдет из блока CATCH и выполнит строку кода ret = pObj->GetAllNumbers();?

Да.

Если это так, то [I] [ожидают] код для сбоя.

Me too.

А также, если он попадает в блок CATCH, он перейдет к концу функции и вызовет возврат ret?

Да.

+4

Вы могли бы просто протестировать его. –

+0

У меня нет способа проверить его, поскольку это некоторая сломанная часть кода, которую невозможно построить. –

+3

@DonK: Почему вам все равно, что он делает, если он так сломан, что он не строится? Он ничего не делает! –

Смежные вопросы