Я не понимаю, почему я получаю ошибку компиляции при попытке скомпилировать это:Компилятор ошибок при переопределении оператора нового
void* MemoryManagedObject::operator new(size_t size, bool UseMemPool)
{
Engine* engine = Engine::GetEngine();
void* alloc;
alloc = engine->GetMemoryManager()->Allocate(size, UseMemPool);
if (alloc && UseMemPool)
mAllocatedWithMemPool = true;
return alloc;
}
Он говорит: «недопустимое использование член MemoryManagedObject :: mAllocatedWithMemPool в статической функции-члена».
В принципе, у меня есть флаг, который указывает, использовал ли я свой пул памяти или просто malloc() при распределении экземпляра класса, и я хочу установить его, когда я переопределяю «новый».
Я полагаю, что новый метод должен быть возвращен, прежде чем вы сможете использовать экземпляр класса? Есть ли способ обойти это?
EDIT: Просто интересно, ss этот код является допустимым решением?
void* MemoryManagedObject::operator new(size_t size, bool UseMemPool)
{
Engine* engine = Engine::GetEngine();
MemoryManagedObject* alloc;
alloc = (MemoryManagedObject*)engine->GetMemoryManager()->Allocate(size, UseMemPool);
if (alloc && UseMemPool)
alloc->mAllocatedWithMemPool = true;
return alloc;
}
Ну, чтобы ответить на ваш прямой вопрос: вы получаете ошибку компилятора, потому что 'operator new' является статической функцией. –
Это не значит, что метод 'new' должен возвращаться, это значит, что экземпляр класса должен * существовать *. Похоже, вам не нужен «оператор новый», а класс-оболочка. –
Распределитель должен выделять память, а не строить какие-либо объекты. Таким образом, он должен возвращать 'void *', и вы не можете иметь доступ, как 'alloc-> mAllocatedWithMemPool'. Конструктор объекта будет вызываться позже в возвращаемой памяти. –