هو null إنهاء المعالج المسموح به؟
-
19-09-2019 - |
سؤال
في VC ++ 7 إذا قمت بذلك التالية:
void myTerminate()
{
cout << "In myTerminate()";
abort();
}
int main( int, char** )
{
set_terminate( &myTerminate );
set_terminate( 0 );
terminate();
return 0;
}
البرنامج يتصرف تماما كما لو abort()
كان يسمى مباشرة وهذا هو بالضبط ما الافتراضي terminate()
معالج يفعل.
إذا حذفت set_terminate( 0 );
بيان يتم استدعاء معالج إنهاء بلدي. لذلك الاتصال set_terminate( 0 )
يبدو أن يكون له تأثير إعادة تعيين terminate()
معالج إلى الافتراضي.
هل هذا السلوك خاص ب VC ++ 7 فقط؟ لن يركض البرنامج في سلوك غير محدد إذا اتصلت set_terminate( 0 )
في بعض التنفيذ الآخر؟
المحلول
تبحث في المعيار يكشف ما يلي:
terminate_handler set_terminate(terminate_handler f) throw();
1 الآثار: يحدد الوظيفة المعينة من خلال وظيفة المعالج الحالي ... قص
2 يتطلب: يجب ألا يكون f a مؤشر فارغ.
3 العائدات: إنهاء السابق_Handler.
يبدو أنه غير قياسي.
لا تنتمي إلى StackOverflow