從語法上來說,建構函式可以丟擲異常。但從邏輯上和風險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...