[問題] vector 釋放記憶體

看板C_and_CPP (C/C++)作者 (ine)時間16年前 (2010/05/09 00:04), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串1/1
想請問各位板友: 現在我知道當vector的元素是指標時, 如果要清空vector要一個一個清掉每個元素, 現在我的資料是像以下的存法: class CClass{ ...... vector<CStudent*> m_student; }; CStudent類別內的資料是vector<CPhone*> m_phone; CPhone內的資料是string, 而CClass , CStudent的解構元裡面是用iterator配上for迴圈, (例如) vector<CStudent*>::iterator iter = m_student.begin(); 依序把元素一個一個delete掉.. --問題來了-- 現在程式正常結束時,記憶體(每個元素指向的記憶體)都有正常的釋放掉, 假如現在內容是這樣:(資料都已經存入) CClass myClass; 如果我現在想刪除單一個元素,已經用iterator指到它了, 然後寫 myClass.erase(iter); (問題一) 這樣會去呼叫解構元來解構iter指向的元素嗎 ? (問題二) erase似乎不會釋放記憶體(vector的大小), 刪除單一元素之後,要如何將所佔的記憶體空間縮小到正確的大小呢? 感謝各位!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.44.89

05/09 00:17, , 1F
1.不會 2.swap
05/09 00:17, 1F

05/09 00:22, , 2F
1.雖然它會幫你呼叫解構式, 但因為指標不是物件, 所以
05/09 00:22, 2F

05/09 00:26, , 3F
還是要自己來
05/09 00:26, 3F

05/09 01:57, , 4F
感謝樓上兩位!!
05/09 01:57, 4F
文章代碼(AID): #1BvOjorA (C_and_CPP)
文章代碼(AID): #1BvOjorA (C_and_CPP)