最近一位面試官問我C++中的異常對象在哪裏被分配,堆或棧?我不確定,但我回答了堆棧,因爲我認爲沒有「新」或「malloc」。這是對的嗎?異常對象在哪裏有它的空間,堆或棧,以及如何在不同的類中訪問它?
然後他一直問我,是否在堆棧上,假設類A拋出一個異常對象,讓我們說「e」,並且類B抓住「e」。由於「e」在A堆棧中,那麼B如何訪問這個「e」?
我不是很清楚第二個問題。任何人都可以給我一些示例代碼,顯示「A類拋出E和B類捕獲它」?另外,我猜測B可以通過複製值或地址來捕獲e,但是面試者只是拒絕我的答案而沒有給我一個正確的答案,那麼什麼是正確的答案,有沒有什麼機制可以確保類對象可以從其他類對象中捕獲異常?感謝〜
自己堆棧的類嗎?這聽起來像一個混亂的採訪者。堆棧用於實現功能,整個程序使用相同的功能;函數拋出異常,函數捕獲異常。 – molbdnilo 2014-12-02 21:55:26
@molbdnilo - 一個程序可以有多個堆棧。這取決於選擇的編譯器和選項。通常,程序在其整個生命週期中使用相同的堆棧,但不是必需的。 – StarPilot 2014-12-02 22:01:44
答案是**既不**。 – Deduplicator 2014-12-02 22:04:31