[問題] pushFront()

看板EE_DSnP作者 (...)時間14年前 (2011/11/12 22:51), 編輯推噓8(8017)
留言25則, 6人參與, 最新討論串1/3 (看更多)
問一個蠢問題QQ ----------------------- 當delete掉memTestObj時,把它存進recycleList, 應該會用到pushFront()這個function, 我看投影片是要把_first改成傳進去的pointer, 那之前的_first所指的位置要怎麼存呢 QQ ?? 感謝回答!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.7.214

11/12 23:23, , 1F
把它的位置偷寫在新進來Object的前size_t大小個byte裡
11/12 23:23, 1F

11/12 23:27, , 2F
是說如果T裡面真的有存東西,這方法是不是就不能用了
11/12 23:27, 2F

11/12 23:56, , 3F
可以問一下為什麼是size_t大小嗎???
11/12 23:56, 3F

11/13 00:10, , 4F
我不懂要怎麼偷寫欸QQ Object裡面要怎麼寫位置???
11/13 00:10, 4F

11/13 00:19, , 5F
因為size_t的大小剛好是指標的大小(會隨platform改變)
11/13 00:19, 5F

11/13 00:20, , 6F
不把長度定死,才能寫出在32/64位元系統上都能跑的程式
11/13 00:20, 6F

11/13 00:20, , 7F
_first原本的type是T*嘛,代表他存的記憶體只到的位置是存T
11/13 00:20, 7F

11/13 00:22, , 8F
如果你在某當下把_first視為T** 那裡面的記憶體就是指向T*
11/13 00:22, 8F

11/13 00:23, , 9F
所以你就可以在裡面存一個T*囉
11/13 00:23, 9F

11/13 00:24, , 10F
我的作法是把T*轉成size_t*,再把要存的地址轉成size_t
11/13 00:24, 10F

11/13 00:25, , 11F
存進去,應該不只一種做法
11/13 00:25, 11F

11/13 00:37, , 12F
所以是*_first=之前的obj的位置嗎 ?
11/13 00:37, 12F

11/13 00:42, , 13F
這樣compile不過... QQ
11/13 00:42, 13F

11/13 00:48, , 14F
因為compiler把_first視為T* 裡面應該存T,你卻存T*進去
11/13 00:48, 14F

11/13 00:49, , 15F
所以當然不會讓你過,你要讓compiler以為*_first是存T*的
11/13 00:49, 15F

11/13 00:51, , 16F
我記得這老師上課有說,雖然我自己寫的時候也忘了,想超久XD
11/13 00:51, 16F

11/13 00:52, , 17F
T*也不會用到啊,為什麼不通通用成void*
11/13 00:52, 17F

11/13 00:52, , 18F
這樣就不用轉來轉去了
11/13 00:52, 18F

11/13 00:53, , 19F
一直想不通這個問題
11/13 00:53, 19F

11/13 01:09, , 20F
我知道了 XD 謝謝樓上幾位的回答!(跪
11/13 01:09, 20F

11/13 02:24, , 21F
我猜真的有存東西也是可以用的 不過可能拿回來的東西要重新
11/13 02:24, 21F

11/13 02:24, , 22F
把裡面的東西initialize一次
11/13 02:24, 22F

11/13 11:09, , 23F
裡面有東西是可以用的 因為會被丟到 recycle 的記憶體
11/13 11:09, 23F

11/13 11:09, , 24F
就是之前已經不要的了才會被丟來這
11/13 11:09, 24F

11/13 11:30, , 25F
對耶,原來如此,謝謝樓上
11/13 11:30, 25F
文章代碼(AID): #1EleWEgC (EE_DSnP)
討論串 (同標題文章)
文章代碼(AID): #1EleWEgC (EE_DSnP)