亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C ++中通過指針捕獲異常

在C ++中通過指針捕獲異常

C++
慕的地10843 2019-10-28 15:02:55
我發現有三種捕獲異常的方法,有什么區別?1)抓住價值;2)通過引用捕獲;3)被指針抓?。晃抑恢腊粗挡东@將調用該對象的兩個副本,按引用捕獲將調用一個對象。那么指針捕獲又如何呢?何時使用指針捕獲?除了拋出一個對象,我還能拋出一個指向這樣的對象的指針嗎?class A {}void f() {  A *p = new A();        throw p;}
查看完整描述

3 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

推薦的方法是按值拋出并按引用捕獲

您的示例代碼將拋出一個指針,這是一個壞主意,因為您將不得不在捕獲站點上管理內存。

如果您確實覺得應該拋出一個指針,請使用諸如的智能指針shared_ptr。

無論如何,Herb Sutter和Alexei Alexandrescu在我解釋的C ++編碼標準書中對此做了很好的解釋。


查看完整回答
反對 回復 2019-10-28
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

捕獲遵循正常的分配兼容性規則,也就是說,如果您拋出一個值,則可以將其捕獲為值或引用,但不能將其捕獲為指針。如果拋出指針,則只能將其作為指針(或對指針的引用...)來捕獲。

但是拋出指針并沒有任何意義,只會引起內存管理的麻煩。因此,通常應遵循按值拋出的規則,按引用捕獲的規則,如Gregory所述。


查看完整回答
反對 回復 2019-10-28
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

盡管實際上可以拋出任何類型的任何對象,但這樣做幾乎沒有什么收獲(如果有的話)。動態分配主要在對象的生存期不適合自動分配的情況下有用,例如,您希望其生存期獨立于常規程序范圍。

但是,對于異常對象,這實際上沒有多大意義。通常,異常對象僅在異常處理程序內部使用,并且您明確希望在退出該異常的(最后一個)處理程序時將其銷毀。

還有一個事實是,您通常希望保持異常處理代碼相當簡單。僅舉例來說,如果您要報告已耗盡或損壞的免費存儲/堆,則嘗試從已耗盡/損壞的免費存儲/堆中分配異常對象通常無法很好地工作...


查看完整回答
反對 回復 2019-10-28
  • 3 回答
  • 0 關注
  • 642 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號