- 不建議在構造函數中拋出異常。當構造函數中拋出異常時,析構函數將不會被執行,需要手動釋放內存。
- 析構函數不應該拋出異常。當析構函數中有一些可能發生的異常時,這時候要把可能發生的異常完全封裝在析構函數內部,決不能讓它拋出到函數之外。
?測試代碼:
#include <iostream>
using namespace std;class A {
public:A(){cout << "construction fun " << endl;throw 1;}~A(){cout << "destruction fun " << endl;throw 2;}
};int main()
{try{A a;}catch (...)//catch all{cout << "caught!" << endl;}return(0);
}
輸出結果:
?
參考資料:
1.?C++中構造函數和析構函數可以拋出異常嗎?
2.?構造函數、析構函數拋出異常的問題