本篇文章給大家分享的是有關C++構造函數(shù)拋出異常的注意事項有哪些,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
目前創(chuàng)新互聯(lián)公司已為數(shù)千家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)站空間、網(wǎng)站托管、服務器托管、企業(yè)網(wǎng)站設計、尼河口網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。1.構造函數(shù)拋出異常導致內存泄漏
在C++構造函數(shù)中,既需要分配內存,又需要拋出異常時要特別注意防止內存泄露的情況發(fā)生。因為在構造函數(shù)中拋出異常,在概念上將被視為該對象沒有被成功構造,因此當前對象的析構函數(shù)就不會被調用。同時,由于構造函數(shù)本身也是一個函數(shù),在函數(shù)體內拋出異常將導致當前函數(shù)運行結束,并釋放已經(jīng)構造的成員對象,包括其基類的成員,即執(zhí)行直接基類和成員對象的析構函數(shù)??疾烊缦鲁绦?。
#include <iostream> using namespace std; class C { int m; public: C(){cout<<"in C constructor"<<endl;} ~C(){cout<<"in C destructor"<<endl;} }; class A { public: A(){cout<<"in A constructor"<<endl;} ~A(){cout<<"in A destructor"<<endl;} }; class B:public A { public: C c; char* resource; B() { resource=new char[100]; cout<<"in B constructor"<<endl; throw -1; } ~B() { cout<<"in B destructor"<<endl; delete[] resource; } }; int main() { try { B b; } catch(int) { cout<<"catched"<<endl; } }
名稱欄目:C++構造函數(shù)拋出異常的注意事項有哪些-創(chuàng)新互聯(lián)
標題鏈接:http://jinyejixie.com/article0/csdooo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、域名注冊、企業(yè)建站、App設計、搜索引擎優(yōu)化、服務器托管
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容