[問題] global operator new/delete overload

看板C_and_CPP (C/C++)作者 (耐吉七四七三一)時間13年前 (2012/11/16 09:06), 編輯推噓0(0011)
留言11則, 3人參與, 最新討論串1/1
開發平台(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

11/16 11:00, , 1F
你可以讓你要監控的 class 去繼承共同的 parent
11/16 11:00, 1F

11/16 11:01, , 2F
再去 overload parent class 的 new /delete
11/16 11:01, 2F

11/16 11:09, , 3F
但這樣會造成使用上的麻煩 尤其當某些class已有繼承關係
11/16 11:09, 3F

11/16 17:25, , 4F

11/16 17:26, , 5F
使用上與一般的 new / delete 完全一樣,
11/16 17:26, 5F

11/16 17:27, , 6F
只有宣告的部分需要修改而已。
11/16 17:27, 6F

11/16 17:43, , 7F
如果是這種作法 那我新增任一類別 便要先繼承MemoryBase
11/16 17:43, 7F

11/16 17:45, , 8F
在使用上仍然不便Orz
11/16 17:45, 8F

11/16 17:51, , 9F
習慣就好了 (拍拍
11/16 17:51, 9F

11/17 00:47, , 10F
如果你在用 C++ 的話,應該是可以做 allocator
11/17 00:47, 10F
文章代碼(AID): #1GfP5ycq (C_and_CPP)
文章代碼(AID): #1GfP5ycq (C_and_CPP)