一.建構函式
1. 建構函式中丟擲異常,會導致析構函式不能被呼叫,但物件本身已申請到的記憶體資源會被系統釋放(已申請到資源的內部成員變數會被系統依次逆序呼叫其析構函式)。
2. 因為析構函式不能被呼叫,所以可能會造成記憶體洩露或系統資源未被釋放。
3. 建構函式中可以丟擲異常,但必須保證在建構函式丟擲異常之前,把系統資源釋放掉,防止記憶體洩露。(如何保證???使用auto_ptr???)
二.析構函式
1. 不要在析構函式中丟擲異常!雖然c++並不禁止析構函式丟擲異常,但這樣會導致程式過早結束或出現不明確的行為。
2. 如果某個操作可能會丟擲異常,類應提供乙個普通函式(而非析構函式),來執行該操作。目的是給客戶乙個處理錯誤的機會。
3. 如果析構函式中異常非拋不可,那就用try catch來將異常吞下,但這樣方法並不好,我們提倡有錯早些報出來。
#include using namespace std;
class a
{public:
a() {cout<<"a()"《最後總結
1. 建構函式中盡量不要丟擲異常,能避免的就避免,如果必須,要考慮不要記憶體洩露!
2. 不要在析構函式中丟擲異常!
C 中建構函式和析構函式可以丟擲異常嗎
c 中建構函式和析構函式可以丟擲異常嗎?一.析構函式 參照 effective c 中條款08 別讓異常逃離析構函式。總結如下 1.不要在析構函式中丟擲異常!雖然c 並不禁止析構函式丟擲異常,但這樣會導致程式過早結束或出現不明確的行為。2.如果某個操作可能會丟擲異常,class應提供乙個普通函式 而...
建構函式和析構函式中丟擲異常
不會造成記憶體洩漏 1 new乙個物件有兩個過程 a.向系統申請記憶體空間 b.在申請的記憶體空間上執行建構函式,初始化物件。2 內部物件構造先於物件本身。3 物件在建構函式丟擲異常後,系統會負責清理構造物件時申請的記憶體,但不會呼叫物件析構函式。也就是說構造物件的記憶體會被釋放掉,已經完成例項化的...
C 中建構函式和析構函式丟擲異常問題
一.丟擲異常 1.1 丟擲異常 也稱為拋棄異常 即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異常。該語句的格式為 throw 表示式 如果在try語句塊的程式段中 包括在其中呼叫的函式 發現了異常,且拋棄了該異常,則這個異常就可以被try語句塊後的某個catc...