构造函数和析构函数中抛出异常
生活随笔
收集整理的這篇文章主要介紹了
构造函数和析构函数中抛出异常
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1 構(gòu)造函數(shù)中拋出異常
- 2 析構(gòu)函數(shù)中的異常
1 構(gòu)造函數(shù)中拋出異常
如果構(gòu)造函數(shù)中拋出異常會發(fā)生什么情況?
構(gòu)造函數(shù)中拋出異常:
- 構(gòu)造過程立即停止。
- 當(dāng)前對象無法生成。
- 析構(gòu)函數(shù)不會被調(diào)用。
- 對象所占的空間立即收回。
工程中的建議:
- 不要在構(gòu)造函數(shù)中拋出異常。
- 當(dāng)構(gòu)造函數(shù)可能產(chǎn)生異常時,使用二階構(gòu)造模式。
編程實(shí)驗(yàn):構(gòu)造函數(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下可以使用如下工具判斷是否有內(nèi)存泄漏:
valgrind --tool=memcheck --leak-check=full ./a.out
2 析構(gòu)函數(shù)中的異常
避免在析構(gòu)函數(shù)中拋出異常!
析構(gòu)函數(shù)的異常將導(dǎo)致:
- 對象所使用的資源無法完全釋放。
- 可能導(dǎo)致terminate()多次被調(diào)用。
參考資料:
總結(jié)
以上是生活随笔為你收集整理的构造函数和析构函数中抛出异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断一个变量是不是指针
- 下一篇: DB伪指令