Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การปรับแต่งพฤติกรรมการสิ้นสุดโปรแกรมสำหรับ Uncaught Exception ใน C++

ในบทช่วยสอนนี้ เราจะพูดถึงการปรับแต่งพฤติกรรมสำหรับ Uncaught Exceptions (ข้อยกเว้นที่ไม่ถูกจับ) ใน C++

ปกติ Exception จะถูกจัดการโดย try-catch block แต่มีกรณีที่ไม่มี catch block ที่ตรงกัน ทำให้โปรแกรมสิ้นสุดการทำงานทันที ฟังก์ชัน terminate() นี้สามารถปรับแต่งได้ตามต้องการ

ตัวอย่างโค้ด

#include <exception>
#include <iostream>
using namespace std;

// นิยาม custom terminate handler
void myhandler() {
    cout << "Inside new terminate handler\n";
    abort();
}

int main() {
    set_terminate(myhandler);
    
    try {
        cout << "Inside try block\n";
        throw 100; // โยน exception แบบ int
    }
    catch(char a) { // catch แบบ char - ไม่ตรงกับ int
        cout << "Inside catch block\n";
    }
    
    return 0;
}

เอาต์พุต

Inside try block
Inside new terminate handler

คำอธิบาย

  • set_terminate(myhandler): ตั้งค่า handler ใหม่สำหรับ terminate
  • โค้ดโยน throw 100 (int) แต่ catch รอ char จึงไม่จับได้
  • ทำให้โปรแกรมเรียก custom terminate handler แทนค่าเริ่มต้น
  • abort() จะหยุดโปรแกรมทันทีโดยไม่ทำ stack unwinding