Я перегрузил новый оператор следующим кодом.классы с деструктором и новым оператором.
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