当我的类具有析构函数并且没有时,我发现operator new []的参数值之间存在差异。 请参阅下一个代码:
class A
{
public:
~A()
{
}
void *operator new (size_t size)
{
return malloc(size);
}
void operator delete (void *p)
{
free(p);
}
void *operator new[] (size_t size)
{
return malloc(size);
}
void operator delete[] (void *p)
{
free(p);
}
void *operator new(size_t size, void *p)
{
return p;
}
private:
int m_a;
};
int main()
{
size_t size = 50;
A *p_a = new A[size];
delete[] p_a;
}
我已经使用注释和未注释的Destructor定义对此代码进行了详细说明。 在第一种情况下,尺寸值为200 在第二种情况下,尺寸值为204
我一直都知道我们为数组分配了更多内存,以获得有关数组大小的知识。但我不知道开销内存取决于析构函数的存在。
我的意思是,如果编译器不需要通过内存块进行迭代并调用析构函数,那么编译器就不需要额外的内存。
如果有人对标准有任何其他想法或参考,请给我:)