1
由於我下面的頭:LinkedList的析構函數風格
#ifndef LIST_H
#define LIST_H
#include "ListEle.h"
class List{
private: ListEle* data;
const List* next;
public: List(ListEle* d, List* n):data(d),next(n){}
~List(){
if(data!=nullptr)delete data;
if(next!=nullptr)delete next;
}
};
#endif
它是正確的,我的名單將遞歸地刪除自己?
然後,我讀了幾條線程,指出使用遞歸析構函數(用於列表)最終會垃圾我的堆棧。所以,我搜索的替代,發現像這樣的例子:
~List(){
delete data;
List* delptr = next;
while(delptr!=nullptr){
List* temp = delptr->next;
delete delptr;
delptr = temp;
}
}
如果我的想法是正確的第二個例子是,因爲「刪除delptr」線也不知何故遞歸。我的想法是,刪除delptr調用我的下一個列表項的析構函數,它將創建一個「delptr」,並繼續調用下一個項目的析構函數。因此我的堆棧應該與我的第一個示例類似。我很確定,我對刪除對象的理解可能存在錯誤。目前我覺得第二個例子中的while循環是非常不必要的。
希望有人可以幫我清理我的情況, 提前致謝。
請注意,在將它傳遞給'delete'之前,不需要檢查null的指針。後者爲你做。 –