首页 > 解决方案 > 将对象添加到指针数组的函数

问题描述

我需要将多个学生添加到课程班级,但它会不断覆盖最后一个条目。

我尝试将地址设置为对象并使用方括号运算符,但这会导致内存泄漏。问题出在AddStudent功能上

class Student {
public:
  Student() { name = "unknown"; };
  Student(string n) { name = n; };
  void Print() { cout << name << endl; };
  string GetName() { return name; };
private:
  string name;
};

class Course {

public:
  Course(int i) {
    id=i;
    nstudents=0;
    capacity=0;
  };

  void AddStudent(Student s) {
    students=&s;
    nstudents++;
  };

private:
  int capacity;
  int nstudents;
  Student* students;
  int id;
};

它只允许我添加一名学生。

标签: c++

解决方案


“学生=&s;” 您正在获取一个按值复制变量的地址,该变量在您离开函数后变得悬空。你不存储学生。您必须在其中放置一个容器,例如 std::vector 并在其中复制/移动您的学生。

所以这里有一个带有复制和移动的 std::vector 。

class Course {

    public:
    Course(int i) {
        id=i;
    };

    void AddStudent(const Student& s) {
        students.push_back(s);
    };

    void AddStudent(Student&& s) {
        students.push_back(std::move(s));
    };

    private:
    std::vector<Student> students;
    int id;
};

推荐阅读