一、異常概述
異常是指程序執行時出現的意外或異常情況,如除數為0,文件不存在等。這些異常導致程序無法正常執行,甚至崩潰。C++中提供了異常處理機制,能夠在程序出現異常時進行捕獲和處理,讓程序更加健壯。
二、異常處理語句
C++中使用try-catch語句進行異常處理,通過捕獲異常並在catch語句中進行相應處理,使程序在出現異常時能夠繼續執行。
try {
// 可能出現異常的代碼塊
} catch (ExceptionType e) {
// 異常處理代碼
}
try語句塊中包含可能會拋出異常的代碼,當異常被拋出時,程序會跳轉到catch語句中進行異常處理。ExceptionType為自定義類型,捕獲指定類型的異常。catch語句可以有多個,分別處理不同類型的異常。
三、自定義異常
C++中可以自定義異常類型,用於區分不同的異常情況。自定義異常需要繼承自std::exception類,並重載其what()方法,返回異常的描述信息。
class CustomException : public std::exception {
public:
const char* what() const throw() {
return "This is a custom exception";
}
};
在程序中拋出自定義異常:
try {
throw CustomException();
} catch (std::exception& e) {
std::cout << e.what() << std::endl; // 輸出異常描述信息
}
四、異常傳遞
異常可以在函數間傳遞,用於在高層調用函數中處理異常。當函數中出現異常,程序跳轉到調用函數中進行異常處理,繼續將異常傳遞給調用函數,直到異常被處理或程序終止。
void func1() {
try {
func2(); // 調用函數2
} catch (std::exception& e) {
std::cout << e.what() << std::endl;
throw; // 拋出異常
}
}
void func2() {
throw CustomException(); // 拋出自定義異常
}
在程序中調用函數1:
try {
func1(); // 調用函數1
} catch (std::exception& e) {
std::cout << e.what() << std::endl;
}
五、異常安全
在程序中,異常可能會導致資源沒有釋放或部分釋放,造成資源泄露或錯誤。為了避免這種情況,可以使用異常安全的代碼。
異常安全的代碼分為三個級別,分別為:
- 基本異常安全(Basic exception safety):不會泄露資源,但程序狀態可能已被修改。
- 強異常安全(Strong exception safety):程序狀態和資源都不會發生改變。
- 不拋出異常保證(No-throw guarantee):不會發生異常。
為了實現強異常安全,可以使用RAII(資源獲取即初始化)技術,將資源的分配和釋放放在同一個類中進行,通過構造函數和析構函數來實現自動化管理。在異常發生時,調用析構函數自動釋放資源。
class Test {
private:
int* ptr;
public:
Test() {
ptr = new int;
}
~Test() {
delete ptr;
}
};
在程序中使用RAII:
void func() {
Test t; // RAII資源管理類
// 可能拋出異常的代碼
}
六、總結
通過C++異常處理機制,能夠讓程序在出現異常時進行捕獲和處理,提高程序的健壯性。通過自定義異常類型和異常傳遞,能夠進行更加詳細的異常處理。在編寫代碼時,需要考慮到異常安全,避免資源泄露和錯誤。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/232545.html
微信掃一掃
支付寶掃一掃