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