1

我有一个包含医生类的程序,每个医生对象都有一个“患者”的链接列表。这些患者是使用以下代码行创建的

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

然后将该患者添加到医生的链接列表中。Doctor 类中有一个指针,用于指向并遍历列表并获取每个患者。当我想删除这些患者时,我必须从列表的开头开始遍历每个患者。我的问题是,我可以通过在遍历它们时简单地调用它们的析构函数来删除 eacg 患者吗?

Patient::~Patient(){

}

还是我需要在指针指向每个员工时实际调用 delete ?

4

5 回答 5

9

你打电话delete删除东西。 delete反过来,将导致调用对象的析构函数。

直接调用类的析构函数是 C++ 支持的,实际上在一些罕见的场景中很有用,但它实际上并没有释放内存。这不是你想在这里做的。

于 2012-10-09T17:41:56.797 回答
5

首先,new返回一个指针,所以我猜你的意思是Patient* patient = ....

除此之外,是的,您需要调用delete您分配的所有内容,new并且将调用析构函数。

(drumroll) 使用 astd::unique_ptr代替。我希望当你说你有一个病人名单时,你的意思是你有一个std::list病人。

于 2012-10-09T17:42:06.423 回答
2

调用delete实际上将调用对象的析构函数。

于 2012-10-09T17:42:00.397 回答
1

由于您正在为每个 Patient 对象动态分配内存(应该是Patient* patient...),您还需要手动释放每个对象...

查看此wiki页面以获取更多信息。

于 2012-10-09T17:43:09.807 回答
1

据我所知,您必须分别在每个指针上调用 delete 。从 Patient 析构函数中删除指向 Patient 的指针似乎违反了使用类的目的(即它们是自包含的,无法访问外部世界)。

于 2012-10-09T17:43:47.707 回答