直覺告訴我拋出的類型越簡單越好。最好拋出一個int而不是一個指針,最好拋出一個結構而不是一個類。在這種情況下,儘管有必要使用動態分配的成員來拋出幾乎完整的類。在堆中分配內存很方便,因爲緩衝區可能會變得很長,並且複製會很昂貴;它不需要方法,因爲它可以作爲其他對象的控制/參數結構,但是它可以方便地將它構建在堆中,以便向struct拋出指針並具有析構函數來清理內存。越簡單越好,那麼析構者應該是虛擬的嗎? 省略虛擬表或vtables不會影響異常通過?結構基類拋出異常對象
從這個結構體中派生類作爲基類的好處是增加更多的數據,而不是多態方法。指針可能會從異常點前面幾層被捕獲,並在模塊之間傳遞,因此對象應該儘可能清潔,儘可能避免複合錯誤。
你不應該拋出一個int或一個指針。在這種情況下更簡單。此外,儘量減少構造函數需要做的工作量,特別是涉及動態內存的任何事情。如果這些操作失敗,則無法拋出異常而無需終止程序。 – 2011-04-22 00:21:18
結構並不比一個類更「簡單」(實際上它們不是獨立的實體:它們之間的差異只存在於指定成員訪問規則的方式以及定義類型時的繼承方式中)。聚合比一些真正複雜的類型更簡單,否則它可能會創建;你可能會想到這一點。那個結構只能是聚合是一個神話。 – 2011-04-22 00:36:44
@ Dennis:如果構造異常類型時拋出異常,則不存在終止風險;只有在*拋出之後和處理之前拋出某些東西*。 – 2011-04-22 07:00:52