C++ 默認構造函數本身不能拋出異常,因為它是一種特殊的成員函數,其目的是初始化對象的狀態。然而,在默認構造函數的實現中,可以調用其他可能拋出異常的成員函數。如果這些被調用的函數拋出異常,控制流將離開默認構造函數,并可能導致程序終止。
以下是一個示例,說明了默認構造函數如何調用可能拋出異常的成員函數:
#include <iostream>
#include <stdexcept>
class MyClass {
public:
MyClass() {
// 調用可能拋出異常的成員函數
try {
throw std::runtime_error("An error occurred during construction.");
} catch (const std::runtime_error& e) {
std::cerr << "Caught exception: " << e.what() << std::endl;
// 可以選擇重新拋出異常或以其他方式處理它
throw;
}
}
};
int main() {
try {
MyClass obj;
} catch (const std::runtime_error& e) {
std::cerr << "Caught exception in main: " << e.what() << std::endl;
}
return 0;
}
在這個示例中,MyClass
的默認構造函數嘗試拋出一個異常。如果在構造過程中發生異常,程序將捕獲它并輸出錯誤消息。請注意,如果在調用可能拋出異常的成員函數時沒有使用 try-catch
塊來處理異常,那么異常將導致程序終止。