2012-10-09 225 views
1

我有一個包含一個醫生級別的程序,以及每名醫生對象有「病人」的鏈接列表。這些患者是使用以下代碼行創建的C++刪除指針

Patient * patient = new Patient(string firstname, string ailment); 

然後將此患者添加到醫生的鏈接列表中。 Doctor類中有一個指針,用於指向並遍歷列表並獲取每個患者。當我想要刪除這些患者時,我必須從列表的開始處開始並遍歷每個患者。我的問題是,我是否可以通過在遍歷它們時簡單地調用它們的析構函數來刪除eacg患者?

Patient::~Patient(){ 

} 

還是我需要實際調用指針刪除指針,因爲它指向每個員工?

+1

你的意思是,'病人*病人=新病人(串名字,串疾病);'? –

+0

@slugonamission:你可以直接調用析構函數。 –

+0

這取決於你的鏈表是如何實現的。如果每個Patient類存儲一個指向下一個Patient的指針,那麼在對每個Patient調用delete之前,您需要獲取指向下一個的指針 – oggmonster

回答

9

你叫delete刪除的東西。 delete將反過來導致對象的析構函數被調用。

直接調用類的析構函數是由C++支持的,事實上在某些罕見的情況下很有用,但實際上並沒有釋放內存。這不是你想要在這裏做的。

2

調用delete將實際調用該對象的析構函數。

5

首先,new返回一個指針,所以我想你的意思是Patient* patient = ...。除此之外,是的,你需要調用delete對你分配的所有東西和new和析構函數將被調用。使用代替。我希望當你說你有一個病人名單時,你的意思是你有一個病人std::list

1

既然你是動態分配爲每一個病人對象的內存(應該是Patient* patient壽......),你需要手動取消分配每一個,以及...

看看這個wiki頁面瞭解更多信息。

1

據我所知,你必須單獨調用每個指針的delete。從Patient析構函數中刪除指向Patient的指針似乎違反了使用類的目的(即它們是自包含的並且無法訪問外部世界)。