2014-09-05 42 views
0

下一個指針我明白這可能是一個非常基本的問題,但無論如何,如果你有C++這樣的一個非常簡單的鏈接列表...刪除鏈表在C++

class link{ 
    link * next; 
    ~link(void){ 
     delete next; 
    } 

} 

如果調用析構函數上這個鏈表的頭部和它的下一個節點的指針被刪除,下一個節點的析構函數被調用了嗎?有效地調用頭上的析構函數刪除列表中的所有鏈接。或者列表的其餘部分只是掛在那裏?

+0

你不需要在鏈接的析構函數中「刪除下一個」。 – NetVipeC 2014-09-05 19:40:44

回答

1

這一切都很簡單。如果您有例如link然後一個類時,你使用new運算符,然後鏈接的constrauctor被稱爲創建該類型的對象

link *node = new link; 

當你刪除使用創建的對象的新那麼它的析構函數被調用

delete node; 

在你的例子中next是類型爲link(指向使用new操作符創建的對象的指針)的相同對象作爲保存它的對象。所以當操作符刪除被應用時,它的析構函數會被調用。

0

是的,除了下一個是私人的,所以不能由任何東西設置(你沒有方法或朋友) 如果你要有鏈接派生鏈接的析構函數應該是虛擬的,所以正確的代碼(而不僅僅是鏈接::〜鏈接被刪除)。 你需要刪除下一個,因爲它是一個指向對象實例的指針。如果沒有刪除,則不會發生任何事情(指針的析構函數不會刪除它指向的對象)。

1

是的,刪除對象的析構函數會被調用。因此,在這個實現中,刪除的節點之後的所有節點(或鏈接,如果您願意)也將被銷燬。

0

刪除調用將被刪除的析構函數,然後釋放內存。因此,如果你有一個鏈表(沒有周期)並刪除頭部,它將釋放完整列表。