c++ - 将对象添加到指针数组的函数
问题描述
我需要将多个学生添加到课程班级,但它会不断覆盖最后一个条目。
我尝试将地址设置为对象并使用方括号运算符,但这会导致内存泄漏。问题出在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;
};
它只允许我添加一名学生。
解决方案
“学生=&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;
};
推荐阅读
- pyqt4 - 如何使用 pyqt4 制作闪烁的标签或小部件
- c# - ComboBox.SelectedValue 返回 System.Data.DataRowView
- arrays - MongoDB聚合推送索引
- sql-server - OPENROWSET SSMS 导入 excel 文件
- powershell - 将 GPO 链接到用户
- git - 给定一个 VcPkg 端口 SHA512 哈希,我如何找到该提交?
- awk - 如何提高AWK程序的效率
- proxy - 我的用例的最佳代理解决方案是什么?
- c# - 根据 HTTP POST 响应生成下载链接
- asp.net-web-api2 - 通过 VB.NET 使用 Axios POST 到 ASP.Net WEB API 2