New.cpp запрограммирован неправильно? Ардуино 1.8.9

У меня проблемы с кодом, и я не уверен, что это проблема с распределением памяти. Итак, я просматриваю новый, удаляю, чтобы посмотреть, не выдает ли он ошибки, и, найдя исходный код, нахожу невероятно простые коды. Так просто, что я думаю, что это невозможно.

#include <stdlib.h>

void *operator new(size_t size) {
  return malloc(size);
}

void *operator new[](size_t size) {
  return malloc(size);
}

void operator delete(void * ptr) {
  free(ptr);
}

void operator delete[](void * ptr) {
  free(ptr);
}

Означает ли это, что если я вызову customClass *ptr = new customClass[10];, он выделит только 10 байт вместо sizeof(customClass)*10?

>

, 👍1

Обсуждение

когда вы делаете new customClass[10], это не означает size_t size = 10, @Jaromanda X

@JaromandaX Да... Я понял это после того, как опубликовал вопрос..., @Enrique Mendez


1 ответ


1

http://www.cplusplus.com/reference/new/operator%20new[]/ :

В C++ new[] — это оператор с очень специфическим поведением: выражение с новым оператором для типа массива, сначала вызывает новый оператор функции (т. е. эта функция) с размером ее массива спецификатор типа в качестве первого аргумента (плюс любые служебные данные массива для отслеживать размер, если он есть), и если это удастся, то автоматически инициализирует или создает каждый объект в массиве (если нужный). Наконец, выражение оценивается как указатель на соответствующий тип, указывающий на первый элемент массива.

,