Я обнаружил, что C++ компилятор для AVR UCS не поддерживает new
и delete
операторов, но и то, что есть быстрое решение:Почему эта реализация C++ «нового» оператора работает?
void * operator new(size_t size)
{
return malloc(size);
}
void operator delete(void * ptr)
{
free(ptr);
}
Я предполагаю, что теперь было бы возможно для звонка new ClassName(args);
.
Однако я не уверен, как это работает. Например, что на самом деле возвращает size_t
? Я думал, что конструкторы ничего не возвращают ...
Может ли быть, что new
теперь предполагается использовать по-разному (в сочетании с sizeof()
)?
не перепутать новый и оператор нового. Да, это немного сложно. оператор, который вы перегружаете, просто выделяет память. Вы можете использовать malloc или специальный пул памяти, и вы можете его украсить, чтобы помочь обнаружить утечку памяти и недействительные удаления и т. Д. – CashCow
Означает ли это, что это вообще не создает экземпляр класса вообще или что? Я немного смущен тем, что вы сказали. – corazza
всегда помните, что новый оператор (который вы можете перегрузить) и новое выражение (которое вы обычно используете для создания новых объектов в коде) - это две разные вещи. – PlasmaHH