У меня есть этот код:
const int size = 1024;
char pool[size];
int nextFree = 0;
class A
{
...
}
Я должен расширить функциональные возможности class A
таким образом, чтобы при вызове клиентом динамического выделения этого класса:
A* a = new A();
затем экземпляр, который нужно поместить в глобальный массив pool
.
Я думаю о перегрузке operator new
и использовании placement new
внутри.Примерно так:
class A
{
...
void* operator new(size_t size)
{
void * pInt = ::new (&pool[nextFree]) A();
nextFree += size;
return pInt;
}
...
}
и это работает, пока не дойдет до освобождения динамического выделения, когда компилятор выдает ошибку: «free (): неверный указатель».Я тоже пытался перегрузить operator delete
, но безуспешно.
Есть идеи, как это сделать правильно?