看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《Zoxge (Zoxge)》之銘言: : : 另外 setOS 的參數吃的是 ABC* : : 但你給他的會是 ABC** : : 同樣的 : : &(vVec.at(i)) 的型別為 ABC** : : 感覺 vVec 似乎應該是 vector<ABC> : : 如果真的是這樣 : : 那你的麻煩就很大了 : : 因為你在塞資料進 vector 時會產生 reallocation : : 所以用 &(vVec.at(i)) 取得的位址會失效 : reallocaton是什麼?? 就是當 capacity 不夠用的時候 vector 會配置新的空間,把舊的資料 copy 過去 然後把舊的空間釋放 : 那為什麼我在另外添加元素使capacity改變之前,資料存取都不會有問題呢? 想一下當你配置新的空間並且把成員移過去後 這些成員的位址全部都改變了 但你之前用 setOS(&(vVec.at(i))) 所加入的 是舊的位址,它所在的空間已經還給系統 再去使用的話當然會出問題 : : 即便不是如此 : : ABC 這個 class 的結構也太異常了 : 異常是指?? ABC 底下有兩個陣列 包含 ABC* 看起來這像是一個樹狀結構 但又發現這顆樹的 interior node 還會互相指來指去 如果 ABC 都是動態配置 我相當好奇你如何確保記憶體可以正確釋放 : : 就算沒這個 bug 也一定會有其它 bug 的 : : 建議你把這個 class 中的功能儘量獨立出來 : : 否則這種複雜的結構會讓你 debug 超級痛苦 : 功能獨立出來是指不要用 繼承 或 多型 嗎?? 讓 class 的功能單一、明確 不過因為我不知道這份code的實際用途,所以也很難給具體建議就是了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.78.231
firejox:這我想到埃及分數 沒有寬度 沒有深度XDD 08/17 00:10
firejox:不過老實說 如果沒有說明清楚ABC的結構也是徒然... 08/17 00:23
Zoxge:嗯 謝謝你提醒了我這點 08/17 09:24