[C++] هل من المنطقي أن يتمسك بالاستثناءات في الجزء الرئيسي (...)؟



Answers

لماذا تقول أن الاستثناء سيتم طباعته؟ هذا ليس السلوك النموذجي من وقت التشغيل C ++. في أفضل الأحوال، يمكنك أن تتوقع أن يتم طباعة نوعه.

وبالإضافة إلى ذلك، يترك هذا البرنامج حالة "الفشل"، في حين أن استثناء قد يسبب حالة إنهاء من خلال الإجهاض (أي مع إشارة المشار إليها في رمز الخروج).

Question

لقد وجدت بعض الشفرة في مشروع يشبه ذلك:

int main(int argc, char *argv[])
{
  // some stuff

 try {
  theApp.Run();
 } catch (std::exception& exc) {
  cerr << exc.what() << std::endl;
  exit(EXIT_FAILURE);
 }
 return (EXIT_SUCCESS);
}

أنا لا أفهم لماذا يتم الاستيلاء على الاستثناءات. إذا لم تكن كذلك، فإن التطبيق ببساطة الخروج وسيتم طبع الاستثناء.

هل ترى أي سبب وجيه للقبض على الاستثناءات هنا؟

إديت: أوافق على أنه من الجيد طباعة خطأ الاستثناء. ومع ذلك، أليس من الأفضل إعادة إسقاط الاستثناء؟ لدي شعور بأننا نبتلعه هنا ...




مثال بسيط على الحالة التي لم تسترد فيها المكدس:
لماذا لا يتم استدعاء ديستروكتور على استثناء؟

قائمة الحالات التي قد تؤدي فيها الاستثناءات إلى إنهاء التطبيق بدلا من إلغاء المكدس.
لماذا لا يتم استدعاء ديستروكتور على استثناء؟

إذا لم يتم القبض على استثناء على أي مستوى، والهروب من الرئيسي () ثم يسمح للتطبيق لاستدعاء إنهاء () بدلا من أن فك المكدس (نعم هذا اشتعلتني على حين غرة أيضا).

ونتيجة لذلك أنا دائما قبض على جميع الاستثناءات في الرئيسية ().

int main()
{
    try
    {
    }
    catch(std::exception const& e)
    {  /* LOG */
       // optimally rethrow
    }
    catch(...) // Catch anything else.
    {  /* LOG */
       // optimally rethrow
    }
}

للمساعدة في التقاط المشاكل أثناء التصحيح. تستمد الاستثناءات الخاصة بك من ستد :: استثناء ثم التمسك نقطة فاصل في منشئ لاستدال :: ستد.




إلقاء نظرة على الكتاب المقدس C ++ أي ستروستروب، لديه مثال الذي يتكرر أيضا في برمجة C ++ التطبيقية. والسبب هو:

int main(void)
{
     try
     {
          // your code 
     }
     catch ( /* YourPossibleExceptions i.e. barfs you expect may occur */ )
     {
     }
     catch ( ... ) // unexpected errors, so you can exit gracefully
     {
     }
}





Links