C++ 将对象推回向量指针,对象类进入命名空间

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

主要问题是如何将患者的对象添加到指针向量中。 类Patient处于命名空间运行状况中。患者有姓名、姓氏和号码(我使用set和get)。我应该去医院的指针向量

主要部分

病媒患者;
健康:患者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=新健康::患者(“约翰”,“四月”)p1->set(“2351”)
    。但是考虑不要使用指针的指针,比如Paulduls-建议你不必太在意内存管理。然后,你需要调整<代码>医院< /代码>的构造函数,例如:<代码>医院::医院(STD:STRSTR,STD:STATION和AULL)任务是使用指针,然后任务是错误的。任务是教你坏C++。你想要<代码>向量患者;<代码>(无星号)。如果您真的想要
    患者
    持有指向
    患者
    的指针,您还需要
    p1
    成为该类型:
    健康::患者*p1=新健康::患者(“约翰”,“四月”)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"));