如何解决将对象推回向量指针,对象类进入名称空间
主要问题是如何将患者的对象添加到指针向量中。 类Patient在名称空间Health中。患者有姓名,姓氏和电话号码(我用过设置)。我应该送医院的指针向量。
主要部分
vector<Health::Patient*> patients;
Health::Patient p1("John","April");
p1.set("1234");
cout<<p1.get();
Health::Patient p2("George","Best");
p1.set("2351");
patients.push_back(p1); // in this line push_back doesn't work
Hospital h1("DontGoThere",patients);
我应该创建一个新功能将患者对象添加到vector吗?
解决方法
一些不同的方法:
-
将
patients
保留为Health::Patient*
的向量std::vector<Healt::Patient*> patients; Health::Patient *p1 = new Health::Patient("John","April"); p1->set("1234");
通过这种方式,您必须确保自己为
Patient
的每个实例分配的内存都可以正确释放,例如:// delete last container element std::vector<Health::Patient*>::iterator itr = patients.back(); if (*itr) { delete *itr; } patients.pop_back();
如果实例
的释放实例的指针Hospital
例如还持有指向Patient
-
类似于1),您将指针存储在向量中,但没有在堆上分配
Patient
实例:std::vector<Healt::Patient*> patients; Health::Patient p1 ("John","April"); p1.set("1234"); patients.push_back(&p1);
冒着
patients
可能超出范围的风险,例如,您仍然取消引用传递给Hospital
实例的指针 -
不要使用存储对象指针的向量:
vector<Health::Patient> patients; Health::Patient p1("John","April"); p1.set("1234"); patients.push_back(p1); // adjust Constructor of `Hospital` so it takes `std::vector<Patient>` // as argument (or a reference to it)
这里的好处是您可以简单地调用
patients.pop_back()
来删除最后一个元素-无需释放在堆上分配的内存。当向量超出范围时,内存将自动释放。
在不了解您的完整代码的情况下,我建议Hospital
拥有Patient
的实际实例(或副本),并且您直接在其中添加对象而没有本地容器,但其中一个作为{的成员{1}}(尤其是如果它是一个指针容器)
Hospital
编辑:坚持使用指针时
对于指针方法,您应确保void Hospital::addPatient(Health::Patient p) {
m_patients.push_back(p);
}
Health::Patient p1("John","April");
p1.set("1234");
h1.addPatient(p1);
拥有所传递的Hospital
实例的所有权,以便仅在此处处理内存管理:
Patient
对于这种方法,最好甚至根本不使用指针变量// m_patients now of type std::vector<Health::Patient*>
void Hospital::addPatient(Health::Patient* p) {
if (p) {
m_patients.push_back(p);
}
}
Health::Patient *p1 = new Health::Patient("John","April");
p1->set("1234");
// Hospital takes ownership
h1.addPatient(p1);
p1 = NULL;
,并改进p1
的构造函数,这样它可以立即创建适当的对象,而您不必确保Patient
无法再访问它。
p1
如1)中所示,您需要确保正确释放内存-h1.addPatient(new Health::Patient("John","April","1234"));
的析构函数将是释放Hospital
中所有剩余元素的正确位置,例如
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。