2015-06-01 47 views
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 
} 
+0

鑑於你是C++的新手,你真的*需要將指針存儲在'allCourses'中嗎?有些情況下你需要,但是這些情況很少,並且存儲指針會帶來額外的複雜性,就像你發現的那樣。所以,如果可以的話,存儲對象。 – juanchopanza

回答

1

當你叫什麼我不知道是。