Как delete [] "знает" размер массива операндов?
ОДИН ИЗ подходов для компиляторов c++ - выделить немного больше cpp памяти и сохранить количество c++ элементов в элементе заголовка.
Пример c++ того, как это можно сделать:
Здесь
int* i = new int[4];
компилятор c++ выделит sizeof(int)*5
байты.
int *temp = malloc(sizeof(int)*5)
Сохранит "4" в cpp первых sizeof(int)
байтах
*temp = 4;
и установите cpp i
i = temp + 1;
Итак, i
будет указывать на c++ массив из 4 элементов, а cpp не 5.
И удаление
delete[] i;
будет обрабатываться cpp следующим образом:
int *temp = i - 1;
int numbers_of_element = *temp; // = 4
... call destructor for numbers_of_element elements
... that are stored in temp + 1, temp + 2, ... temp + 4 if needed
free (temp)
c++
Как delete [] "знает" размер массива операндов?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.