我有这样的代码
#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;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我接收size
运算符新重载的值为20个字节,如我想要的那样sizeof(int) * 5
.但是,如果我取消注释析构函数,我会得到size
24字节.是的,我现在用这些额外的字节来存储已分配内存的大小并等于sizeof(size_t)
.我无法理解为什么只有在我明确地实现析构函数时才能得到它们.如果我不这样做,编译器应该做同样的事情或者我错过了什么?
我在MSVS 2010和2012上试过了.编译为Win32.