Перегрузка операторов new и delete. Павел Синай
Материал из SEWiki
Версия от 13:24, 30 мая 2011; Sinay (обсуждение | вклад)
Содержание
Для чего это нужно
- Организация кэширования памяти.
- Организация сборщика мусора.
- Поиск утечек памяти.
Перегрузка операторов new и delete в классах
Как это делается:
struct A
{
int a;
void * operator new(size_t size)
{
return malloc(size);
}
void operator delete(void *p)
{
free(p);
}
}
В оператор new передается параметр size, указывающий сколько памяти нужно выделить. Это сделано для возможности наследования от нашего класса - наследникам скорее всего понадобится больше памяти, и мы должны ее выделить. Возвращаемое значение оператора new void*, а не A*, так как на момент его работы объект еще не существует. Конструктор будет вызван только после успешной отработки оператора new.