c++ - runtime error: vector push_back()

c++ - runtime error: vector push_back()

请告诉我此代码出现运行时错误的原因。 我认为 addEmployee() 函数有问题。

#include <iostream>
#include <vector>
#include <string>
using namespace std;

enum EmployeeLevel {fresh, sophomore, junior, senior};

class Employee {
    string name;
    EmployeeLevel level;
public:
    Employee(const string & _name, const EmployeeLevel _level)
        : name(_name) {
        level = _level;
    }
    Employee(const Employee & employee) {
        name = employee.name;
        level = employee.level;
    }
    void changeLevel() {
        level = static_cast<EmployeeLevel> (level + 1);
    }
};

class Manager: public Employee {
    vector<Employee *> group;
public:
    Manager(const string & _name, const EmployeeLevel _level)
        : Employee(_name, _level) {}
    ~Manager() {
        for (vector<Employee *>::iterator it = group.begin(); it != group.end(); ++it)
            delete *it;
    }
    void addEmployee(Employee * employee) {
        group.push_back(employee);
    }
};

int main(void)
{
    Employee e1("홍", fresh), e2("김", sophomore), e3("차", fresh);    

    Manager m1("Tom", senior);
    m1.addEmployee(&e1);
}

如果我如下所示修改函数(addEmployee()),则不会出错。 但我想知道为什么使用 "push_back(employee)" 会出现运行时错误。

void addEmployee(Employee * employee) {
    Employee * tempEmployee = new Employee(*employee);
    group.push_back(tempEmployee);
}

第一个版本的崩溃问题在于,您添加了一个指向 局部变量 的指针,即编译器为其管理存储的对象。这意味着当 Manager 被破坏时,它会尝试 delete 这个对象,一个你没有用 new.

分配的对象

只有deletenew(和delete[]new[])!

事实上,我认为根本没有理由使用指针。取而代之的是一个普通对象的向量,即 std::vector<Employee>.