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