【发布时间】:2020-07-22 14:34:03
【问题描述】:
我在用 C++ 为我的程序创建文件系统时遇到了一些问题。好吧,我正在创建一个新学生,如果他是我在保存文件和关闭程序之前创建的最后一个对象,它就会被复制。例如,两个对象:Daniel、Paul。它只显示最后一个重复的:Daniel、Paul、Paul - 在 file.txt 中。
这是我的一些代码:
文件阅读:
ifstream file;
file.open("file.txt");
while (1)
{
Student *p = new Student();
if (file.eof() || file.bad() || file.fail())
{
break;
}
getline(file, ALLTHESTRINGVARIABLES);
p->STRINGVARIABLES = ALLTHESTRINGVARIABLES;
file >> ANOTHERVARIABLES;
p->NOTSTRINGVARIABLES = ANOTHERVARIABLES;
students.push_back(p);
}
file.close();
文件写入:
fstream file;
file.open("file.txt", ios::out | ios::trunc);
for(unsigned int i = 0; i < students.size(); i++){
file << students[i]->VARIABLEEXAMPLE << endl;
}
file.close();
谢谢!!
【问题讨论】:
-
无关:不要使用
new。只需将其设为Student p;并将其设为std::vector<Student> students;即可避免手动内存管理。 -
显示
Student和file.txt的示例。创建minimal reproducible example。 -
@Ted Lyngmo 你可能是对的,但由于学生容器包含指针,我们需要分配(unique_ptr 或 shared_ptr 可能?)。如果没有完整的代码和实际用例,就无法判断。也就是说,是否有充分的理由使用指针容器?我们无法从我们得到的东西中分辨出来:(
-
好的,但是为什么不按照我的建议制作学生容器呢?是否使用了动态调度?
标签: c++ file oop fstream archive