[英]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.