日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

c++别让异常逃离析构函数

發(fā)布時(shí)間:2024/9/27 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++别让异常逃离析构函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C++并不禁止析構(gòu)函數(shù)吐出異常,但是并不鼓勵(lì)這樣做

    • 1)原因
    • 2)如何解決

1)原因

如果析構(gòu)函數(shù)吐出異常,程序可能過(guò)早結(jié)束(比如某個(gè)函數(shù)調(diào)用發(fā)生異常,在回溯尋找catch過(guò)程中,每離開(kāi)一個(gè)函數(shù),這個(gè)函數(shù)內(nèi)的局部對(duì)象會(huì)被析構(gòu),如果此時(shí)析構(gòu)函數(shù)又拋出異常,前一個(gè)異常還沒(méi)得到處理又來(lái)一個(gè),因此一般會(huì)引起程序過(guò)早結(jié)束)。異常從析構(gòu)函數(shù)中傳播出去,可能會(huì)導(dǎo)致不明確的行為
知乎相關(guān)描述

2)如何解決

1.在析構(gòu)函數(shù)中catch異常,然后調(diào)用abort終止程序。通過(guò)abort搶先置“不明確行為”于死地
2.在析構(gòu)函數(shù)中catch異常,然后記錄該失敗,即吞掉異常(通常是個(gè)壞主意,因?yàn)檫@樣壓制了“某些動(dòng)作失敗”的重要信息。但是也比負(fù)擔(dān)“草率結(jié)束程序”或”不明確行為帶來(lái)的風(fēng)險(xiǎn)“好)
3.重新設(shè)計(jì)接口,讓客戶能夠在析構(gòu)前主動(dòng)調(diào)用可能引起異常的函數(shù),然后析構(gòu)函數(shù)中使用一個(gè)bool變量,根據(jù)用戶是否主動(dòng)調(diào)用來(lái)決定析構(gòu)函數(shù)中是否應(yīng)該調(diào)用可能引起異常的函數(shù),讓客戶擁有主動(dòng)權(quán)(如果客戶沒(méi)有主動(dòng)調(diào)用,那么當(dāng)發(fā)生異常時(shí)也不應(yīng)該抱怨,因?yàn)橐呀?jīng)給出了客戶自己處理異常的機(jī)會(huì))

總結(jié)

以上是生活随笔為你收集整理的c++别让异常逃离析构函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。