2012-10-09 163 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的指针似乎违反了使用类的目的(即它们是自包含的并且无法访问外部世界)。