小编Pav*_*sky的帖子

运算符new []不接收额外的字节

我有这样的代码

#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.但是,如果我取消注释析构函数,我会得到size24字节.是的,我现在用这些额外的字节来存储已分配内存的大小并等于sizeof(size_t).我无法理解为什么只有在我明确地实现析构函数时才能得到它们.如果我不这样做,编译器应该做同样的事情或者我错过了什么?

我在MSVS 2010和2012上试过了.编译为Win32.

c++ destructor operator-overloading new-operator

7
推荐指数
2
解决办法
267
查看次数