上幾篇文章已經(jīng)分別對(duì)C++的異常對(duì)象的幾種不同的傳遞方式進(jìn)行了詳細(xì)地討論。它們可以被分為按值傳遞,按引用傳遞,以及按指針傳遞等三種方式,現(xiàn)在該是對(duì)它們進(jìn)行全面盤點(diǎn)總結(jié)的時(shí)候了。希望這種對(duì)比、總結(jié)及分析對(duì)朋友們理解這三種方式的各種區(qū)別有所幫助。
按值傳遞 引用傳遞 指針傳遞
語(yǔ)法 catch(std::exception e) catch(std::exception& e) catch(std::exception* e)
如何拋出異常? ①throw exception()
②exception ex;throw ex;
③throw ex_global; ①throw exception()
②exception ex;throw ex;
③throw ex_global;
①throw new exception();
異常對(duì)象的構(gòu)造次數(shù) 三次 二次 一次
效率 低 中 高
異常對(duì)象什么時(shí)候被銷毀 ①局部變量離開(kāi)作用域時(shí)銷毀
②臨時(shí)變量在catch block執(zhí)行完畢后銷毀
③catch后面的那個(gè)類似參數(shù)的異常對(duì)象也是在catch block執(zhí)行完畢后銷毀 ①局部變量離開(kāi)作用域時(shí)銷毀
②臨時(shí)變量在catch block執(zhí)行完畢后銷毀 異常對(duì)象動(dòng)態(tài)地在堆上被創(chuàng)建,同時(shí)它也要?jiǎng)討B(tài)的被銷毀,銷毀的時(shí)機(jī)是在catch block塊中處理完畢后進(jìn)行
發(fā)生對(duì)象切片 可能會(huì) 不會(huì) 不會(huì)
安全性 較低,可能會(huì)發(fā)生對(duì)象切片 很好 低,依賴于程序員的能力,可能會(huì)發(fā)生內(nèi)存泄漏;或?qū)е鲁绦虮罎?BR> 綜合性能 差 好 一般
易使用性 好 好 一般
至此,對(duì)C++中的異常處理機(jī)制與模型已經(jīng)進(jìn)行了非常全面的闡述和分析,包括C++異常的語(yǔ)法,C++異常的使用技巧,C++異常與面向?qū)ο蟮南嗷リP(guān)系,以及異常對(duì)象的構(gòu)造、傳遞和最后析構(gòu)銷毀的過(guò)程。
主人公阿愚現(xiàn)在已經(jīng)開(kāi)始有點(diǎn)小有成就感了,他知道自己對(duì)她(C++中的異常處理機(jī)制)已有了相當(dāng)深入的了解,并且把她完全當(dāng)成了一個(gè)知己,在自己的編程生涯中再也開(kāi)始離不開(kāi)她了。而且他與她的配合已經(jīng)變得十分的默契,得心應(yīng)手。但是有時(shí)好像還是有點(diǎn)迷糊,例如,對(duì)于在C++異常重新被拋出時(shí)(rethrow),異常對(duì)象的構(gòu)造、傳遞和析構(gòu)銷毀的過(guò)程又將如何?有哪些不同之處?,要想了解更多的細(xì)節(jié),程序員朋友們!請(qǐng)跟主人公阿愚進(jìn)入到下一篇文章中,GO!
按值傳遞 引用傳遞 指針傳遞
語(yǔ)法 catch(std::exception e) catch(std::exception& e) catch(std::exception* e)
如何拋出異常? ①throw exception()
②exception ex;throw ex;
③throw ex_global; ①throw exception()
②exception ex;throw ex;
③throw ex_global;
①throw new exception();
異常對(duì)象的構(gòu)造次數(shù) 三次 二次 一次
效率 低 中 高
異常對(duì)象什么時(shí)候被銷毀 ①局部變量離開(kāi)作用域時(shí)銷毀
②臨時(shí)變量在catch block執(zhí)行完畢后銷毀
③catch后面的那個(gè)類似參數(shù)的異常對(duì)象也是在catch block執(zhí)行完畢后銷毀 ①局部變量離開(kāi)作用域時(shí)銷毀
②臨時(shí)變量在catch block執(zhí)行完畢后銷毀 異常對(duì)象動(dòng)態(tài)地在堆上被創(chuàng)建,同時(shí)它也要?jiǎng)討B(tài)的被銷毀,銷毀的時(shí)機(jī)是在catch block塊中處理完畢后進(jìn)行
發(fā)生對(duì)象切片 可能會(huì) 不會(huì) 不會(huì)
安全性 較低,可能會(huì)發(fā)生對(duì)象切片 很好 低,依賴于程序員的能力,可能會(huì)發(fā)生內(nèi)存泄漏;或?qū)е鲁绦虮罎?BR> 綜合性能 差 好 一般
易使用性 好 好 一般
至此,對(duì)C++中的異常處理機(jī)制與模型已經(jīng)進(jìn)行了非常全面的闡述和分析,包括C++異常的語(yǔ)法,C++異常的使用技巧,C++異常與面向?qū)ο蟮南嗷リP(guān)系,以及異常對(duì)象的構(gòu)造、傳遞和最后析構(gòu)銷毀的過(guò)程。
主人公阿愚現(xiàn)在已經(jīng)開(kāi)始有點(diǎn)小有成就感了,他知道自己對(duì)她(C++中的異常處理機(jī)制)已有了相當(dāng)深入的了解,并且把她完全當(dāng)成了一個(gè)知己,在自己的編程生涯中再也開(kāi)始離不開(kāi)她了。而且他與她的配合已經(jīng)變得十分的默契,得心應(yīng)手。但是有時(shí)好像還是有點(diǎn)迷糊,例如,對(duì)于在C++異常重新被拋出時(shí)(rethrow),異常對(duì)象的構(gòu)造、傳遞和析構(gòu)銷毀的過(guò)程又將如何?有哪些不同之處?,要想了解更多的細(xì)節(jié),程序員朋友們!請(qǐng)跟主人公阿愚進(jìn)入到下一篇文章中,GO!