2009-01-19 11 views
6

Bazı C++ sınıflarını aşağıdaki gibi tanımlanmış bir yıkıcı ile gördüm:C++ destructor'larımın beyanlarına throw() eklemeliyim mi?

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

Bu iyi bir fikir mi?

Yıkıcıların asla istisna atmaması gerektiğinin farkındayım, fakat bu aslında benim tahripçilerimde istisnalar atmamı engelleyecek mi? Ne garanti ettiğinden% 100 emin değilim.

Referans: this recent question

cevap

7

Bu, bozucunuzdan istisnalar atmanızı engellemez. Derleyici bunu yapmana izin verecek. Fark ise eğer imhadan bir istisnanın çıkmasına izin veriyorsa, programınız hemen unexpected'u arayacaktır. Bu işlev, varsayılan olarak terminate olan unexpected_handler puanını arar. Beklenmeyen bir istisna ile başa çıkmak için bir şey yapmazsanız, programınız sona erer, ki bu tamamen kötü bir fikir değildir. Ne de olsa, istisna gerçekten beklenmedikse, programın yine de bunu yapmak için yapabileceği hiçbir şey yoktur.

Bu, yıkıcılar hakkında özel bir şey değildir; tüm kurallar için aynı kurallar istisna özelliklerine uygulanır.

3

Berbat bir fikir değil. Hiçbir istisna yayılmadığı halde dtoru atarsanız, derhal iptal edeceksiniz, bu da gerçek bir atma yapmayan bir doter yapmayı unuttuğunuzu bilmenizi sağlar.

Öte yandan, atma özelliklerini dışarda bırakırsanız, bir istisna, aslında, atıldığında, yalnızca kötü dtor uygulamanızı bilirsiniz.

İlgili konular