ในบทช่วยสอนนี้ เราจะพูดถึงการปรับแต่งพฤติกรรมสำหรับ 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