Javaの背景から来ていますが、次のコードは私を混乱させています。ここで混乱はnew
キーワードなしのC++オブジェクトの作成です。私はこのオブジェクトを作成していますStudent_info info;
し、ベクトルに追加します。私は新しいキーワードを使用してそれを作成していないので、スタックに割り当てられ、ループが終了した後に破棄されますか?その場合、最後のループがベクトルから情報を正しく抽出する方法は?ベクトルに追加されたすべてのオブジェクトが破棄されたので例外をスローするべきではありませんか?C++のstructオブジェクトのスコープが新しいキーワードなしで作成されました
struct Student_info {
string name;
vector<double> marks;
};
int main()
{
int num = 2;
vector<Student_info> student_infos;
for (int i = 0; i < 3; i++) {
Student_info info; //will this object be destroyed once this loop exits?
cout << "Enter name:";
cin >> info.name;
double x;
cout << "Enter 2 marks";
for (int j = 0; j < num; j++) {
cin >> x;
info.marks.push_back(x);
}
student_infos.push_back(info);
}
for (int i = 0; i < 3; i++) {
cout << student_infos[i].name;
for (int j = 0; j < num; j++) {
cout << student_infos[i].marks[j];
}
cout << endl;
}
return 0;
}
Javaのバックグラウンドから来ているので、変数とポインタの違いを知ることをお勧めします。また、何かをパラメータとして渡すときは常にコピーされることに注意してください。代わりにポインタを使用すると、Javaの動作が得られます。次に、 '' new''キーワードを使用する必要があります。 – BrainStone