[問題] delete[](void*,size_t size)的size問題

看板C_and_CPP作者 (有趣生活)時間14年前 (2010/08/01 18:31), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
在 overload operator delete (或 delete[]) 採用 (void *p, size_t size) 這種版本時 收到的 size 應為整個 object (或 array) 所佔有的 bytes 數 對於自訂的 operator delete 我用 VC9 和 gcc4.3.2 編譯下列 code 收到的 size 都正常 目前的問題是 在 VC 裡發現自訂的 operator delete[] 所收到的 size 仍只有一個 object 的大小 但 gcc 編出來的則正常,為整個 array 大小 (3 個 object 加上額外空間) 想請問各位有碰到過這類問題嗎?感謝 #include <iostream> using namespace std; class newtest{ public: static void *operator new(size_t size) throw(bad_alloc){ cout << "newtest::op new " << size << endl; return ::operator new(size); } static void *operator new[](size_t size) throw(bad_alloc){ cout << "newtest::op new[] " << size << endl; return ::operator new[](size); } static void operator delete(void *p, size_t size) throw(){ cout << "newtest::delete " << size << endl; ::operator delete(p); } static void operator delete[](void *p, size_t size) throw(){ cout << "newtest::delete[] " << size << endl; ::operator delete[](p); } ~newtest(){ cout << "~newtest" << endl; } private: char m[10]; }; int main(int argc, char* argv[]){ newtest *nt = 0; nt = new newtest; delete nt; cout << endl; nt = new newtest[3]; delete[] nt; return 0; } VC9's output ================================= newtest::op new 10 ~newtest newtest::delete 10 newtest::op new[] 34 ~newtest ~newtest ~newtest newtest::delete[] 10 ================================= g++ 4.3.2 's output ================================= newtest::op new 10 ~newtest newtest::delete 10 newtest::op new[] 34 ~newtest ~newtest ~newtest newtest::delete[] 34 ================================= -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.12.253
文章代碼(AID): #1CLKqArT (C_and_CPP)