Два вопроса, два ответа.
Вопрос первый: вызывает ли вызов new [] дважды для одного и того же указателя без вызова delete [] между ними, вызывает утечку памяти?
Ответ один: не всегда, но в 99% случаев да. Приведенный ниже код дважды вызывает new с указателем на массив, но в первый раз он назначает адрес выделенной памяти для array2, а во второй раз он сохраняет этот адрес для себя. Можно удалить оба массива в этом сценарии.
#include <iostream>
int main()
{
double *array;
double *array2;
const int arraySize = 100000;
for (int i = 0; i < 2; i++)
{
// do I need to call "delete [] array;" here?
array = new double[arraySize];
if(i == 0)
{
array2 = array;
}
}
int x;
std::cin >> x; // pause the program to view memory consumption
delete [] array;
delete [] array2;
return 0;
}
Вопрос второй: достаточно ли использования delete []?
Ответ второй: нет, потому что вызов delete влияет только на адрес, на который указывает указатель, который вы ему дали. Когда вы перезаписали указатель в вашем примере, он удалит последний выделенный раздел памяти