因此,我嘗試基於Java Exception類爲C++編寫一個簡單的基本Exception類。 我確定已經有很好的圖書館了,但是我正在做這個練習,而不是生產代碼,而且我很好奇並且總是期待學習。 Java的例外所做的一件事,我也想實現,就是'原因'的概念。在Java中,有一個原因的新異常的樣子:在C++中實現異常類
Exception cause = new Exception();
Exception newExcept = new Exception(cause);
然而,在C++中,傳遞一個異常作爲參數傳遞給構造函數是拷貝構造函數是如何被調用。因此,複製Exception和創建一個新的Exception與原因之間存在概念上的脫節。這顯然不是Java中的問題。
我想我只是想知道處理這個問題的最好方法是什麼。有幾個想法,我所做的是:
- 區分具有虛擬變量
- 只需創建新的異常,並呼籲setCause()方法
- 像拷貝構造函數的東西是
Exception(Exception &)
與事業構造是Exception(Exception *)
感謝
IIRC拋出的異常並未分配到堆棧上,而是放在一個用於存放拋出的異常的「特殊」存儲區中,因爲當異常正在傳播時,堆棧被解除。 – 2010-09-10 12:13:48
@matteo大概你是對的。它們是「特殊的」,因爲在調用catch塊時已經發生堆棧展開。可能這是編譯器特定的。 – 2010-09-10 13:36:38
您需要使用智能指針指向經理m_BaseException,因爲異常對象會被複制到整個地方。目前,您可能會多次刪除基本異常指針(以及遞歸鏈)。 – 2010-09-10 13:38:50