C 建構函式丟擲異常需要注意的地方

2022-09-27 02:09:10 字數 622 閱讀 5874

從語法上來說,建構函式可以丟擲異常。但從邏輯上和風險xnnuyu控制上,建構函式中盡量不要丟擲異常。萬不得已,一定要注意防止記憶體洩露。

1.建構函式丟擲異常導致記憶體洩漏

在c++建構函式中,既需要分配記憶體,又需要丟擲異常時要特別注意防止記憶體洩露的情況發生。因為在建構函式中丟擲異常,在概念上將被視為該物件沒有被成功構造,因此當前物件的析構函式就不會被呼叫。同時,由於建構函式本身也是乙個函式,在函式體內丟擲異常將導致當前函式執行結束,並釋放已經構造的成員物件,包括其基類的成員,即執行直接基類和成員物件的析構函式。考察如下程式。

#include

using namespace std;

class c

~a()

};class b

~b()

};int main()

catch (int)

}程式執行結果:

in a constructor

in b constructor

in a destructor

catched

從程式的執行結果來看,通過智慧型指針對記憶體資源的管理,儘管在類b建構函式丟擲異常導致類b析構函式未被執行,但類a的析構函式仍然在物件pa生命週期結束時被呼叫,避免了資源洩漏。

C 使用localtime函式需要注意的地方

cpp include time t tmnow time null tm ptmnow localtime tmnow 從tm結構體中可以取到年月日時分秒等值。這裡localtime返回了乙個tm指標,空間是由localtime自己控制的,所以如果連續呼叫這個函式會有問題。很多時候我們會同時處理兩...

C 使用localtime函式需要注意的地方

cpp view plain copy include time t tmnow time null tm ptmnow localtime tmnow 從tm結構體中可以取到年月日時分秒等值。這裡localtime返回了乙個tm指標,空間是由localtime自己控制的,所以如果 連續呼叫這個函式...

C 使用localtime函式需要注意的地方

在處理時間時用到了localtime這個函式,將乙個utc時間轉為本地時間 cpp include time t tmnow time null tm ptmnow localtime tmnow 從tm結構體中可以取到年月日時分秒等值。這裡localtime返回了乙個tm指標,空間是由localt...