析構函式與dispose()方法的區別
1. dispose需要實現idisposable介面。
2. dispose由開發人員**呼叫,而析構函式由gc自動呼叫。
3. dispose方法應釋放所有託管和非託管資源。而析構函式只應釋放非託管資源。因為析構函式由gc來判斷呼叫,當gc判斷某個物件不再需要的時候,則呼叫其析構方法,這時候該物件中可能還包含有其他有用的託管資源。
4. 通過系統gc頻繁的呼叫析構方法來釋放資源會降低系統效能,所以推薦顯示呼叫dispose方法。
5. dispose方法結尾處加上**「gc.suppressfinalize(this);」,即告訴gc不需要再呼叫該物件的析構方法,否則,gc仍會在判斷該物件不再有用後呼叫其析構方法,雖然程式不會出錯,但影響系統效能。
6、析構函式 和 dispose 釋放的資源應該相同,這樣即使類使用者在沒有呼叫 dispose 的情況下,資源也會在 finalize 中得到釋放。
7、finalize 不應為 public。
8、有 dispose 方法存在時,應該呼叫它,因為 finalize 釋放資源通常是很慢的。
關於智慧型指標析構函式原理隨筆(不能析構動態陣列)
總所周知,在std中有著auto ptr和shared ptr,其中auto ptr是只允許被乙個指標所使用,即 受auto ptrs管理的資源必須絕對沒有乙個以上的auto ptr同時指向它 也就是無論是拷貝構造或者賦值時都會讓原來的指標為null。舉個例子 std auto ptrpinv1 n...
C 析構函式 虛析構函式
1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...
建構函式 析構函式 虛析構函式
說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...