C++ 将对象推回向量指针,对象类进入命名空间
主要问题是如何将患者的对象添加到指针向量中。 类Patient处于命名空间运行状况中。患者有姓名、姓氏和号码(我使用set和get)。我应该去医院的指针向量 主要部分C++ 将对象推回向量指针,对象类进入命名空间,c++,object,vector,C++,Object,Vector,主要问题是如何将患者的对象添加到指针向量中。 类Patient处于命名空间运行状况中。患者有姓名、姓氏和号码(我使用set和get)。我应该去医院的指针向量 主要部分 病媒患者; 健康:患者p1(“约翰”、“四月”); p1.集合(“1234”); cout一些不同的方法: 将患者作为健康的载体::患者* std::vector<Healt::Patient*> patients; Health::Patient *p1 = new Health::Patient("Joh
病媒患者;
健康:患者p1(“约翰”、“四月”);
p1.集合(“1234”);
cout一些不同的方法:
将患者
作为健康的载体::患者*
std::vector<Healt::Patient*> patients;
Health::Patient *p1 = new Health::Patient("John", "April");
p1->set("1234");
如果一个实例Hospital
也持有一个指向Patient
如1)在向量中存储指针,但不在堆上分配Patient
实例:
std::vector<Healt::Patient*> patients;
Health::Patient p1 ("John", "April");
p1.set("1234");
patients.push_back(&p1);
这里的优点是,您只需调用patients.pop_back()
即可删除最后一个元素,无需释放在堆上分配的内存。当向量超出范围时,会自动释放内存
在不了解您的全部代码的情况下,我建议医院
拥有患者
的实际实例(或副本),您可以直接在那里添加对象,而无需使用本地容器,而是作为医院
的成员(特别是如果它是指针容器)
编辑:坚持使用指针时
对于指针方法,您应该确保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;
如1)所示,您需要确保正确释放内存-医院的析构函数将是释放m_患者中所有剩余元素的正确位置,例如,一些不同的方法:
将患者
作为健康的载体::患者*
std::vector<Healt::Patient*> patients;
Health::Patient *p1 = new Health::Patient("John", "April");
p1->set("1234");
如果一个实例Hospital
也持有一个指向Patient
如1)在向量中存储指针,但不在堆上分配Patient
实例:
std::vector<Healt::Patient*> patients;
Health::Patient p1 ("John", "April");
p1.set("1234");
patients.push_back(&p1);
这里的优点是,您只需调用patients.pop_back()
即可删除最后一个元素,无需释放在堆上分配的内存。当向量超出范围时,会自动释放内存
在不了解您的全部代码的情况下,我建议医院
拥有患者
的实际实例(或副本),您可以直接在那里添加对象,而无需使用本地容器,而是作为医院
的成员(特别是如果它是指针容器)
编辑:坚持使用指针时
对于指针方法,您应该确保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;
如1)所示,您需要确保正确释放内存-医院的析构函数将是释放m_患者
内所有剩余元素的正确位置,例如您想要向量患者代码>(无星号)。如果您真的想要患者
持有指向患者
的指针,您还需要p1
成为该类型:健康::患者*p1=新健康::患者(“约翰”,“四月”)但当元素从向量中弹出时,您需要显式地释放内存way@Momo您需要调用它p1->set(“2351”)
。但是考虑不要使用指针的指针,比如Paulduls-建议你不必太在意内存管理。然后,你需要调整<代码>医院< /代码>的构造函数,例如:<代码>医院::医院(STD:STRSTR,STD:STATION和AULL)任务是使用指针,然后任务是错误的。任务是教你坏C++。你想要<代码>向量患者;<代码>(无星号)。如果您真的想要患者
持有指向患者
的指针,您还需要p1
成为该类型:健康::患者*p1=新健康::患者(“约翰”,“四月”)但当元素从向量中弹出时,您需要显式地释放内存way@Momo您需要调用它p1->set(“2351”)
。但是考虑不要使用指针的指针,比如Paulduls-建议你不必太在意内存管理。然后需要调整<代码>医院< /代码>的构造函数,如<代码>医院::医院(STD:String STR,STD::Vector and Apple)任务是使用指针,然后任务是错误的。任务是教你坏C++。
// 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;
h1.addPatient(new Health::Patient("John", "April", "1234"));