构造函数和析构函数中抛出异常
生活随笔
收集整理的這篇文章主要介紹了
构造函数和析构函数中抛出异常
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1 構造函數(shù)中拋出異常
- 2 析構函數(shù)中的異常
1 構造函數(shù)中拋出異常
如果構造函數(shù)中拋出異常會發(fā)生什么情況?
構造函數(shù)中拋出異常:
- 構造過程立即停止。
- 當前對象無法生成。
- 析構函數(shù)不會被調用。
- 對象所占的空間立即收回。
工程中的建議:
- 不要在構造函數(shù)中拋出異常。
- 當構造函數(shù)可能產生異常時,使用二階構造模式。
編程實驗:構造函數(shù)中的異常
#include <iostream> #include <string>using namespace std;class Test { public:Test(){cout << "Test()" << endl;throw 0;}virtual ~Test(){cout << "~Test()" << endl;} };int main(int argc, char *argv[]) {Test* p = reinterpret_cast<Test*>(1);try{p = new Test();}catch(...){cout << "Exception..." << endl;}cout << "p = " << p << endl;return 0; }Linux下可以使用如下工具判斷是否有內存泄漏:
valgrind --tool=memcheck --leak-check=full ./a.out
2 析構函數(shù)中的異常
避免在析構函數(shù)中拋出異常!
析構函數(shù)的異常將導致:
- 對象所使用的資源無法完全釋放。
- 可能導致terminate()多次被調用。
參考資料:
總結
以上是生活随笔為你收集整理的构造函数和析构函数中抛出异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断一个变量是不是指针
- 下一篇: 中信证券总部在哪里