析構函式和建構函式的注意事項

2021-09-26 23:41:02 字數 1095 閱讀 5152

1建構函式:在c++中,使用建構函式來實現物件的初始化。 

建構函式的特點: 

(1)建構函式無需呼叫,建立物件時自動執行。 

(2)建構函式的名稱必須與類名相同,不能隨意起名(不同以初始化函式,雖然和其功能相同); 

(3)建構函式沒有返回值。 

(4)如果程式者沒有自定義建構函式,系統會自動呼叫預設的建構函式。 

(5)如果程式者自己定義了建構函式,則系統會呼叫定義的建構函式,而不會呼叫預設的建構函式。 

(6)建構函式可以被過載。 

(7)建構函式可以用初始化列表進行初始化。 

必須使用初始化列表進行初始化的 : 

(1)const修飾的類成員或初始化的引用成員資料; 

(2)物件的情況(包含繼承情況下,通過顯示呼叫父類的建構函式對父類資料成員進行初始化); 

(3)子類初始化父類的私有成員。 

建構函式的分類 

1)預設引數建構函式:不需要指定實參就可以呼叫的建構函式。 

2)限制建構函式:可以將建構函式放到私有區限制某些形式的物件建立動作。 

3)拷貝建構函式:用乙個類物件去初始化另乙個類物件。

對於拷貝建構函式,如果沒有自定義拷貝建構函式,系統會提供預設的拷貝建構函式。 

拷貝建構函式的引數是引用 

引用:和指標的作用相同,引用是變數的別名,對引用的操作就是對變數本身的操作,不會給引用分配記憶體空間,和變數在同一塊記憶體空間 

2 析構函式:在物件生命週期結束時,完成資源的**和清理。

析構函式的特點: 

(1)析構函式的名稱和類名相同,在前加~; 

(2)沒有返回值,沒有引數; 

(3)析構函式不能進行過載; 

(4)在物件生命週期結束時自動呼叫析構函式完成資源釋放; 

(5)如果沒有自定義析構函式,系統會提供預設的析構函式完成資源的釋放; 

(6)若果自定義了析構函式,就不會呼叫預設的建構函式,呼叫自定義的析構函式。 

(7)析構函式無需主動呼叫,如果主動呼叫析構函式,只會執行析構函式裡的內容,不會釋放記憶體(系統只會在程式結束時,呼叫析構函式完成資源的**)。 

對於建構函式和析構函式的 執行順序:先構造的後釋放。滿足先進後出。

c 建構函式和析構函式丟擲異常的注意事項

從語法上來說,建構函式和析構函式都可以丟擲異常。但從邏輯上和風險控制上,建構函式和析構函式中盡量不要丟擲異常,萬不得已,一定要注意防止資源洩露。在析構函式中丟擲異常還要注意棧展開帶來的程式崩潰。1.建構函式中丟擲異常 在c 建構函式中,既需要分配記憶體,又需要丟擲異常時要特別注意防止記憶體洩露的情況...

構造和析構的幾點注意事項

變數要初始化,初始化盡量使用初始化列表。如果不初始化,變數的值是隨機不確定的。class point 改進之後後 class point private int x int y 私有析構函式,類物件不能在棧上分配空間.只能在堆上分配,但不能delete直接釋放。include using names...

python析構函式用法及注意事項

1 主動刪除物件呼叫del 物件 程式執行結束後,python也會自動進行刪除其他的物件。class animal def del 程式設計客棧self print 銷毀物件 format self cat animal cat2 animal del cat2 print 程式結束 2 如果重寫子...