Размер, заданный для new, равен количеству элементов, , а не объему памяти.Однако вместо этого рассмотрите возможность использования std :: vector.
Например, new int[100]
выделяет не менее 100 * sizeof(int)
байтов (что равно 400, когда sizeof (int) равно 4);все, что он выделяет, будет зависеть от деталей реализации и времени выполнения, от которых вы (за исключением очень редко) не можете зависеть.
Если у вас нет оператора new или operator new []в вашем классе (что обычно не следует делать) будут использоваться глобальные версии, и они будут правильно использовать sizeof (ваш_тип).
Вы пробовали код в обновлении?
Многомерные массивы на самом деле являются массивами массивов;поэтому new возвращает указатель на первый элемент, как и для одномерных массивов, который является указателем на массив:
typedef int int4[4]; // for clarity
int4 *arr = new int4[100];
// above two lines are identical to:
int (*arr)[4] = new int[100][4];
Опять же, вам почти всегда лучше использовать контейнер, чем управлять этимсам.Это вектор, эт.al., но также контейнеры, такие как boost :: array и выделенные типы "matrix" для "квадратных" 2-мерных массивов.