我有这样的代码
#include <cstdlib>
class Foo
{
int m_data;
public :
Foo() : m_data(0) { }
/*~Foo()
{
}*/
static void* operator new[](const size_t size)
{
return malloc(size);
}
static void operator delete[](void* data)
{
free(data);
}
};
int main()
{
Foo* objects = new Foo[5];
delete [] objects;
}
在这种情况下我接收的值size
在操作者新的过载如20个字节,因为我想( sizeof(int) * 5
)。 但是,如果我去掉析构函数,我得到size
为24个字节。 是啊,我现在说这些额外的字节用于存储分配内存的大小,等于sizeof(size_t)
我不明白为什么我让他们只有当我明确实现析构函数。 如果我不这样做,编译器应该做同样的事情或者我失去了一些东西?
我试过,于2010年MSVS和2012年编译为Win32。