C++ 在循环中创建对象并将其添加到向量时,始终会添加相同的对象
我有个问题C++ 在循环中创建对象并将其添加到向量时,始终会添加相同的对象,c++,C++,我有个问题 class student { public: static int id,a,c; static bool editable; static std::queue <int> classes; static queue <int> classesT; static queue <int> classesD; public: student(int x,int y,queue <int>
class student {
public:
static int id,a,c;
static bool editable;
static std::queue <int> classes;
static queue <int> classesT;
static queue <int> classesD;
public:
student(int x,int y,queue <int> z){
editable=true;
id=x;
a=y;
classes=z;
c=classes.size();
}
void DisposeObject()
{
delete this;
}
};
int main(){
std::vector <queue <int> >links;
std::vector <int> quotas;
std::vector <student> sList;
std::queue <int> classes;
std::queue <student> q1;
int a,c,sNum,cNum;
static int temp;
ifstream myFile("....");
if(myFile.is_open()){
myFile>>sNum;
myFile>>cNum;
}
for(int i=0;i<sNum;i++){
myFile>>c;
myFile>>a;
for(int j=0;j<c;j++){
myFile>>temp;
classes.push(temp);
}
student *s1=new student(i,a,classes);
sList.push_back(*s1);
s1->DisposeObject();
while(!classes.empty())
classes.pop();
}
而不是
a,b,c,d
顺便说一下,我已经尝试过保留功能。代码不足以准确指出问题所在。然而,至少有许多事情是可疑的:
if (myFile >> a >> c) {
// carry on
}
else {
std::cout << "ERROR: failed to read record!\n";
// recover, bail out, ...
}
物体会很方便地自行清理。也就是说,快速摆脱DisposeObject()
成员函数!C++使用析构函数,并且整洁地执行它,因为它不是垃圾收集。不要试图将C#习语带到C++中:这对你没有任何好处clear()
:
如果向量不包含指针,为什么要使用new?你能给出一个完整的例子吗?你确定你在每次迭代中都从
myFile
读取不同的信息吗?如果向量中有四个student
实例,则意味着push_-back
s工作,但与对象一起存储的信息不正确。还有,你为什么要new
这个学生?你可以很容易地把你推回去,省去清理:sList.push_back(学生(i,a,班级))
另外,是否DisposeObject()
commit succide,即是否删除此
?否则,每一个学生
你的新
都有漏洞。(注意:我不建议自杀!)@user3106529你调试过你的代码吗?顺便说一句,删除s1
在哪里?sList存储的是什么,s还是*s?以及学生
复制课程
?如果您只是在for(int i…
循环中声明向量类
,每次迭代都会得到一个新的类。您的while()pop
循环似乎不必要或错误。我要补充的是void DisposeObject(){delete this;}
是一个非常糟糕的主意。“正确处理”必须遵守的限制相当繁重:
if (myFile >> a >> c) {
// carry on
}
else {
std::cout << "ERROR: failed to read record!\n";
// recover, bail out, ...
}
sList.push_back(student(i, a, classes));
classes.clear();