簡體   English   中英

我應該將throw()添加到我的C ++析構函數的聲明中嗎?

[英]Should I add throw() to the declarations for my C++ destructors?

我看到一些帶有析構函數的C ++類定義如下:

class someClass
{
    public:
        someClass();
        ~someClass() throw();
};

這是一個好主意嗎?

我很清楚析構函數應該永遠不會拋出異常,但這實際上會阻止我在析構函數中拋出異常嗎? 我不是100%肯定它保證什么。

參考: 最近這個問題

它不會阻止您從析構函數中拋出異常。 編譯器仍然允許你這樣做。 區別在於, 如果您允許異常從該析構函數中逃脫,您的程序將立即調用unexpected 該函數調用unexpected_handler指向的任何內容,默認情況下是terminate 因此,除非你做一些事情來處理意外的異常,否則你的程序會終止,這並不是一個壞主意。 畢竟,如果異常真的是意料之外的話,那么你的程序無論如何都無法處理它。

這對於析構函數來說並不是特別之處; 相同的規則適用於所有方法的異常規范。

這不是一個糟糕的主意。 如果您在沒有異常傳播的情況下投擲dtor,您將立即中止,這會讓您知道您忘記制作一個真正的非投擲dtor。

另一方面,如果你拋出throw規范,那么當事實上拋出異常時,你只會知道你的壞dtor實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM