作者NIKE74731 (耐吉七四七三一)
看板C_and_CPP
標題[問題] global operator new/delete overload
時間Fri Nov 16 09:06:01 2012
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
問題(Question):
最近在練習寫memory pool
做完之後想拿來實際使用看看
想法上是去overload global new/delete operator
new沒什麼問題
但delete就麻煩了
因為delete是overload到原本的
所以像是STL裡面觸發到delete的地方
就會跑到我寫的地方去
當然我也是可以判斷它要釋放的memory是不是我分配出去的
如果不是就free它
但這樣似乎不太好
所以想要像new一樣
寫overload一個非預設的delete
再用#define去蓋掉原本的delete
但這樣compiler就不讓我過了@@
error C2541: 'delete' : cannot delete objects that are not pointers
error C2146: syntax error : missing ';' before identifier 'ps'
想請各位板友看看應該怎麼做才好
或者memory pool的使用其實不該去overload global operator?
有什麼其它的作法嗎
謝謝
程式碼(Code):(請善用置底文網頁, 記得排版)
http://codepad.org/LyB6zLkE
http://codepad.org/S3jIu16t
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.230.120.131
→ linotwo:你可以讓你要監控的 class 去繼承共同的 parent 11/16 11:00
→ linotwo:再去 overload parent class 的 new /delete 11/16 11:01
→ NIKE74731:但這樣會造成使用上的麻煩 尤其當某些class已有繼承關係 11/16 11:09
→ linotwo:使用上與一般的 new / delete 完全一樣, 11/16 17:26
→ linotwo:只有宣告的部分需要修改而已。 11/16 17:27
→ NIKE74731:如果是這種作法 那我新增任一類別 便要先繼承MemoryBase 11/16 17:43
→ NIKE74731:在使用上仍然不便Orz 11/16 17:45
→ linotwo:習慣就好了 (拍拍 11/16 17:51
→ legnaleurc:如果你在用 C++ 的話,應該是可以做 allocator 11/17 00:47