Код (Text): void* operator new (size_t s) { return NULL; } void* operator new [] (size_t s) { return NULL; } void operator delete (void* p) { return; } void operator delete [] (void* p) { return; }
Ну, тогда уж и про Код (Text): void* operator new(size_t, void*); //placement new void operator delete(void*, void*); //placement delete void* operator new(size_t, int line, const char* file); //debug new void operator delete(void*, int line, const char* file); //debug delete не забываем. И вообще, параметров сколько угодно можно напихать после стандартных.
А ещё можно только для класса переопределить, чтобы все объекты класса создались с одного аллокатора: Код (Text): void* MyClass::operator new (size_t nBytes) { return HeapAlloc (<heap handle>, <heap flags>, nBytes); } Даёт весьма быстрый код когда надо освободить сразу все созданные объекты. Освобождаем аллокатор - и с концами! Заодно можно почистить выделяемый блок, чтоб не надо было в конструкторе нулями всё забивать. Одна проблема: некоторые тулзы (DevPartner) будут детектировать такой код как утечку памяти.
А как потом использовать такой оператор напичканный нестандартными аргументами? к примеру: Код (Text): void* operator new (void* cp, unsigned sz) { ... }
Для этого примера: Код (Text): void* pWhere = ...; //каким-то способом выделяем память BYTE* p = new (pWhere) BYTE[1024]; //вот так передаем дополнительные аргументы Идея ясна?
Ага, просвещаемся, потихоньку Неправильно перегрузку оператора я написал Вот так вроде верно будет: Код (Text): void* operator new (unsigned sz, void* cp) // первый аргумент должен быть size_t (unsigned int) { ... } И: new (arg2, arg3, arg...) type[arg1];