Будет ли утечка памяти, если выполнить этот код?

Все никак не могу понять будет-ли в данном коде утечка памяти или нет? Собственно, я в методе pushBack() создаю новый массив большего размера что бы скопировать в него значения массива который передаю в функцию и добавить новое. Далее я удаляю данные на которые указывает arr, и присваиваю ему адрес midArr который указывает на новый массив, после вывожу результат с помощью метода showArr() и снова удаляю данные на которые указывает *arr (но уже в main()). Так вот как я понимаю после всей этой чистки памяти в роди должен остаться указатель midArr, или он удаляется из стека после завершения функции (так как эта переменная является локальной)? Буду рад вашей помощи в этом вопросе.

void pushBack(int *&arr, int &size, const int value) {
    int *midArr = new int[size + 1];
    for (int i = 0; i < size; i++)
    {
        midArr[i] = arr[i];
    }
    midArr[size++] = value;
    delete[] arr;
    arr = midArr;
}
int main()
{
    int size = 10, value = 3, place=3;
    int *arr = new int[size];
    fillArr(arr, size);
    pushBack(arr, size, value);
    showArr(arr, size);
    delete[] arr;
}

Метод fillArr()

void fillArr(int *const arr, const int size) {
    for (int i = 0; i < size; i++)
    {
        arr[i] = rand() % 10;
    }
}

Метод showArr()

void showArr(const int *const arr, const int size) {
    for (int i = 0; i < size; i++)
    {
        cout << arr[i] << "\t";
    }
    cout << endl;
}

Ответы (1 шт):

Автор решения: AlexGlebe

У вашей функции int *midArr = new int[size + 1]; переменная midArr занимает в стеке 8 байт. На что указывать будут указатели не важно, так как указатель это элементарный тип без деструктора.

→ Ссылка