Я знаю в нормальных условиях, как позаботиться о снятии памяти. Мой случай немного отличается.оператор delete - как реализовать?
Я реализую свой собственный пул памяти. Я хотел бы, чтобы клиент моего класса был как можно ближе к общему методу выделения и де-распределения.
inline void* operator new(size_t dead_param, CPool& objPool)
{
return objPool.Allocate();
}
я иметь эту глобальную функцию, так что пользователь моего класса может просто вызвать
Base baseObj = new (poolObj)Base2();
Теперь я не знаю, как назвать деструктор? Я clearl понятия не имею
хотя у меня есть глобальный оператор удаления
inline void operator delete(void* ptr, CPool& objPool)
{
objPool.DeAllocate(ptr);
}
пожалуйста, руководство .. как я могу получить эту функцию, вызываемую из клиентского кода? С минимальными изменениями в синтаксисе со стороны пользователя. Также обратите внимание, что я не хочу, чтобы пользователи моего кода реализовывали operator new
и operator delete
и звонили Allocate
и DeAllocate
оттуда.
Почему не просто люди называют 'Base * baseObj = poolObj.Allocate();' – Barry
Синтаксис для клиента похоже немного уродливый. 'Base * baseObj = (Base *) poolObj.Allocate()'. Yuck .. typecasting ... что, хотя я сохранил как окончательный вариант .. Кроме того, так как не удалось получить эту функцию, я теперь curous. – Adorn
Удаление места размещения вызывается только из внутреннего размещения new, когда конструктор выходит с исключение. Во всех остальных случаях вызывается «нормальный» оператор delete (void *) '. Вы должны занести достаточную информацию в выделенный блок памяти, чтобы иметь возможность освободить его позже, без дополнительного ввода. Часто распределитель записывал дополнительную информацию с отрицательным смещением от возвращаемого указателя. –