私はそのようなコードを持っています
#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)
。デストラクタを明示的に実装した場合にのみ、なぜそれらを取得するのか理解できません。私がそれをしなければ、コンパイラはまったく同じことをするべきですか、それとも私は何かを逃していますか?
私はMSVS2010と2012でそれを試しました。Win32用にコンパイルされています。