سؤال

في 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.

يبدو أنه غير قياسي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top