沒想到因為大意,差一點讓這個小小的析構函式阻礙我成功的步伐。
template linklist::~linklist()
}
所以說這些基礎的東西都超級重要。
template void linklist::insert(int i, t x)
if (p == null) throw"位置"; //沒有找到i-1結點
else
}
有乙個小疑惑,但是應該可以這樣理解:當鍊表為空時還有頭結點,所以頭指標不會為空,不能作為退出迴圈的條件,所以應該是可以正常插入的。
所以插入、刪除時頭結點都是存在的,所以first指標不會為空,即退出迴圈的條件只有鍊錶已遍歷完(位置錯誤)或者找到了正確的位置。不包括空表的情況(因為空表在有頭結點時並不是特殊情況)。
而析構函式的目的是釋放鍊錶的每一節點,包括頭結點,所以用first指標是否為空來判斷,因為此時頭結點可以被刪除。
C 析構函式和虛析構函式。
析構函式如果不是虛的話,基類的析構函式將不會被呼叫。多型時,也就是派生類被基類指標所指,或者被基類別名 虛析構函式,被呼叫時,其自身的析構函式和基類的析構函式都將會被呼叫。非虛的時候,不進行多型,只有基類的會被呼叫。純虛析構函式 定義的時候除了加 0 還需要給出函式的實現。因為當遞迴的呼叫析構函式時...
虛析構函式和protected析構函式
型別需要虛析構函式的另外乙個特徵 是該型別具有指標成員或引用成員。如果有指標成員和引用成員,則該型別通常需要實現析構函式以及拷貝操作。通常,乙個實現了析構函式的型別同時也需要實現拷貝建構函式與拷貝複製函式。1.如果乙個類有虛函式功能,它經常作為乙個基類使用。2.如果它是乙個基類,它的派生類經常使用n...
建構函式 析構函式 虛析構函式
說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...