c++类的构造与析构,与vector的使用
我新建了一个student类,
有姓名name和分数score以及静态成员变量总分sum和人数count;
这个类有两个构造函数,为了调试,我这两个构造函数都有输出“构造了一个student”;
析构时也会输出析构的学生姓名和分数;
当我用vector<student> list;
用控制台输入姓名和分数,逐个list.push_back;
出现了以下神奇的效果:
/////////////////////////////////////////////
以下是从控制台输入和输出。
////////////////////////////////////////////
构造了一个student
输入第1个名字和分数(分数为负数时结束)
asd 23
sum=23 count=1
平均分数23
总分23
输入第2个名字和分数(分数为负数时结束)
as 45
asd--23
析构了一个student
sum=22 count=0
平均分数1.#INF
总分22
输入第3个名字和分数(分数为负数时结束)
d 34
asd--23
析构了一个student
as--45
析构了一个student
sum=-57 count=-2
平均分数28.5
总分-57
输入第4个名字和分数(分数为负数时结束)
/////////////////////////////////////
为什么会调用析构函数,而且只调用了一次构造函数,却调用了好几次析构函数????
////////////////////////////////////
从控制台输入的部分源代码:
////////////////////////////////////
void typein(vector<student> &list)
{
string name;
double score;
student temp;
int i=1;
while(true)
{
cout<<"输入第"<<i<<"个名字和分数"<<"(分数为负数时结束)"<<endl;
cin>>name>>score;
if(score<0)
break;
temp.set(name,score);
//list.push_back((name,score));
list.push_back(temp);
//studentList[i-1].set(name,score);
cout<<"平均分数"<<student::average()<<endl;
cout<<"总分"<<student::sun()<<endl;
++i;
}
}