Мне интересно, как операторы delete [] работают с указателями , возвращаемыми функцией , вместо того, чтобы иметь динамическое размещение в той же области, что и оператор delete.Допустим, у меня есть такая тривиальная функция:
int *getArray()
{
int *returnVal = new int[3];
returnVal[0] = returnVal[1] = returnVal[2] = 0;
return returnVal;
}
Теперь, когда мне нужно использовать этот массив в моем коде, я буду делать следующее:
int *vals = getArray();
// use values...
delete[] vals;
Однако яМне интересно, как компилятор C ++ узнает, насколько большим был выделен блок памяти (и, следовательно, сколько элементов памяти нужно удалить из vals
)?Это правильный метод, или мне нужно было бы удалять каждое значение массива отдельно (как в коде ниже)?
int *vals = getArray();
// use values...
delete vals + 2;
delete vals + 1;
delete vals;