看板 EE_DSnP 關於我們 聯絡資訊
問一個蠢問題QQ ----------------------- 當delete掉memTestObj時,把它存進recycleList, 應該會用到pushFront()這個function, 我看投影片是要把_first改成傳進去的pointer, 那之前的_first所指的位置要怎麼存呢 QQ ?? 感謝回答!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.7.214
wmin0:把它的位置偷寫在新進來Object的前size_t大小個byte裡 11/12 23:23
vuluy:是說如果T裡面真的有存東西,這方法是不是就不能用了 11/12 23:27
Komemushisp:可以問一下為什麼是size_t大小嗎??? 11/12 23:56
Komemushisp:我不懂要怎麼偷寫欸QQ Object裡面要怎麼寫位置??? 11/13 00:10
e124553423:因為size_t的大小剛好是指標的大小(會隨platform改變) 11/13 00:19
e124553423:不把長度定死,才能寫出在32/64位元系統上都能跑的程式 11/13 00:20
vuluy:_first原本的type是T*嘛,代表他存的記憶體只到的位置是存T 11/13 00:20
vuluy:如果你在某當下把_first視為T** 那裡面的記憶體就是指向T* 11/13 00:22
vuluy:所以你就可以在裡面存一個T*囉 11/13 00:23
e124553423:我的作法是把T*轉成size_t*,再把要存的地址轉成size_t 11/13 00:24
e124553423:存進去,應該不只一種做法 11/13 00:25
Komemushisp:所以是*_first=之前的obj的位置嗎 ? 11/13 00:37
Komemushisp:這樣compile不過... QQ 11/13 00:42
vuluy:因為compiler把_first視為T* 裡面應該存T,你卻存T*進去 11/13 00:48
vuluy:所以當然不會讓你過,你要讓compiler以為*_first是存T*的 11/13 00:49
vuluy:我記得這老師上課有說,雖然我自己寫的時候也忘了,想超久XD 11/13 00:51
shryuhuai:T*也不會用到啊,為什麼不通通用成void* 11/13 00:52
shryuhuai:這樣就不用轉來轉去了 11/13 00:52
shryuhuai:一直想不通這個問題 11/13 00:53
Komemushisp:我知道了 XD 謝謝樓上幾位的回答!(跪 11/13 01:09
wmin0:我猜真的有存東西也是可以用的 不過可能拿回來的東西要重新 11/13 02:24
wmin0:把裡面的東西initialize一次 11/13 02:24
TommyKSHS:裡面有東西是可以用的 因為會被丟到 recycle 的記憶體 11/13 11:09
TommyKSHS:就是之前已經不要的了才會被丟來這 11/13 11:09
vuluy:對耶,原來如此,謝謝樓上 11/13 11:30