我已經看到了一些析構函數C++類的定義如下:我應該將throw()添加到我的C++析構函數的聲明中嗎?
class someClass
{
public:
someClass();
~someClass() throw();
};
這是一個好主意?
我很清楚,析構函數不應該拋出異常,但這實際上是否會阻止我在析構函數中拋出異常?我不是100%確定它的保證。
我已經看到了一些析構函數C++類的定義如下:我應該將throw()添加到我的C++析構函數的聲明中嗎?
class someClass
{
public:
someClass();
~someClass() throw();
};
這是一個好主意?
我很清楚,析構函數不應該拋出異常,但這實際上是否會阻止我在析構函數中拋出異常?我不是100%確定它的保證。
它並不妨礙你從析構函數中拋出異常。編譯器仍然會讓你這樣做。所不同的是,如果你確實允許一個異常從那個析構函數中轉義出來,你的程序會立即調用unexpected
。該函數調用任何指向unexpected_handler
的點,默認爲terminate
。所以除非你做了一些事情來處理意外的異常,否則你的程序就會終止,這並不是一個壞主意。畢竟,如果這個異常真的是意外的,那麼你的程序無論如何也沒有什麼能夠處理它。
這不是關於析構函數的特別之處;相同的規則適用於所有方法的異常規範。
這不是一個可怕的想法。如果你在沒有任何異常被傳播的情況下扔進了Dtor,你會立即放棄,這讓你知道你已經忘記了製作一個真正的非投擲Dtor。
另一方面,如果你拋棄了throw spec,那麼當事件拋出時,你只會知道你的糟糕的dtor實現。