[問題] delete[](void*,size_t size)的size問題
在 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