Этот вопрос был вдохновлен похожим вопросом: Как delete [] «знает» размер массива операндов?
Мой вопрос немного отличается: Можно ли каким-то образом определить размер массива C ++ программным способом? А если нет, то почему? Каждая функция, которую я видел, которая принимает массив, также требует целочисленного параметра, чтобы дать ему размер. Но, как указано в связанном вопросе, delete[]
должен знать размер памяти, подлежащей освобождению.
Рассмотрим этот код C ++:
int* arr = new int[256];
printf("Size of arr: %d\n", sizeof(arr));
Это печатает "Size of arr: 4
", который является просто размером указателя. Было бы неплохо иметь некоторую функцию, которая печатает 256, но я не думаю, что она существует в C ++. (Опять же, вопрос в том, почему он не существует.)
Уточнение : я знаю, что если бы я объявил массив в стеке вместо кучи (то есть "int arr[256];
"), то оператор sizeof
вернул бы 1024 (длина массива * sizeof (int) )).