1
所以我習慣於在C#中編寫代碼,並且在經過相當長時間的休息之後再次使用C++。基本上我想要做的是創建一個程序,其中包含課程中帶ID的學生列表。刪除後訪問迭代器會導致崩潰
我有這個代碼,基本上打印出所有可用的學生在課程中。
auto allCourses = WSUCourse::getAllCourses();
std::for_each(
allCourses.begin(),
allCourses.end(),
GetCoursePrinter());
的GetCoursePrinter()
被稱爲這個代碼在構造
struct GetCoursePrinter
{
void operator() (
MyCourse *coursePtr
)
{
std::cout << coursePtr->getIdentifier() <<
": " <<
coursePtr->getTitle() <<
std::endl;
}
};
我的問題是我刪除了像這樣
MyEnrollment *enrollmentPtr = MyEnrollment::findEnrollment(
MyStudent::getStudentWithUniqueID(1000002),
MyCourse::getCourseWithIdentifier("CS 2800")
);
delete enrollmentPtr;
的註冊後,然後嘗試用GetCoursePrinter它打印出來崩潰。我相信這是因爲它試圖訪問不存在的東西。
delete enrollmentPtr;
需要在環境中刪除此文件:如果有一種方法來調用這樣的事情
if (allCourses.current() != null)
{
GetCoursePrinter();
}
else
{
//do nothing
}
鑑於你是C++的新手,你真的*需要將指針存儲在'allCourses'中嗎?有些情況下你需要,但是這些情況很少,並且存儲指針會帶來額外的複雜性,就像你發現的那樣。所以,如果可以的話,存儲對象。 – juanchopanza