0
我用下面的代码重载了新的运算符。现在具有析构函数和新运算符的类
void* operator new(size_t size)
{
cout<<"size=>"<<size<<endl;
return malloc(size);
}
,我试图使用该重载new
一个类对象分配内存。 说的那样类体的定义:
class c
{
char ch;
};
我写了下面的语句
c * p=new c; // gives me the output size=>1 OK Fine..
c *p=new c[100]; // gives me the output size => 100 OK fine.
,但现在我添加一个析构函数的类。 因此,新的身体变得:
class c
{
char ch;
public:
~c(){}
};
现在我又写了相同的语句
c *p= new c;// gives me the output size=>1 OK Fine..
c *p=new c[100]; // gives me the output size => 108.
从何这额外的8而来?
我试图用同样的语句中重新分配阵列,并再次我有大小108(我有一个64位的操作系统,所以我想一个额外的指针被每次分配)。
为什么我的编译器分配这个额外的指针,或者如果它的一些其他东西),当我们在类析构函数?
另请注意,你重载了'operator new'不正确。它应该在分配错误的情况下抛出'std :: bad_alloc',而不是返回0.它应该是'operator new []'数组。 – Lol4t0 2013-04-27 19:11:36