Operator new [] nie otrzymuje dodatkowych bajtów

Mam taki kod

#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;
}

W tym przypadku otrzymuję wartośćsize w operatorze nowe przeciążenie jako 20 bajtów, jak chciałem (sizeof(int) * 5). Ale jeśli odkomentuję destruktor, otrzymamsize jako 24 bajty. Tak, teraz te dodatkowe bajty są używane do przechowywania wielkości przydzielonej pamięci i są równesizeof(size_t). Nie mogę zrozumieć dlaczego otrzymuję je tylko wtedy, gdy implementuję destruktor jawnie. Jeśli tego nie zrobię, kompilator powinien zrobić dokładnie to samo lub coś mi brakuje?

Próbowałem tego na MSVS 2010 i 2012. Skompilowany dla Win32.

questionAnswers(2)

yourAnswerToTheQuestion