Я все еще изучаю c ++ и у меня есть вопрос, который может быть очевиден, или, может быть, я просто не знаю, что я пытаюсь сделать. У меня есть функции, которые берут матрицу (класс, который я написал, у которого есть должным образом написанный деструктор) и создают из него новую матрицу, возвращая ссылку на новую. Мне нужно повторять, возможно, десятки тысяч раз на этих матрицах, поэтому я должен убедиться, что у меня нет утечек памяти. Итак, вопрос в том, как правильно удалить матрицу, которая мне больше не нужна, чтобы освободить место для следующей? Вот код, который я пытаюсь получить без утечек:
DynamicMatrix<double> x0 = getX0(n);
DynamicMatrix<double>exactU = getExactU(n);
DynamicMatrix<double> b = getB(n) * w;
DynamicMatrix<double> x1 = getX1(x0, b, w, n);
while( !isConverged(exactU,x1,e) ){
delete x0; //<<<<< This doesn't work. Nor does delete &x0.
x0 = x1;
x1 = getX1(x0, b, w, n);
}
Каждый из методов getX () создает указатель на матрицу и возвращает ссылку на матрицу, как в getX0 ():
DynamicMatrix<double> &getX0(int n){
DynamicMatrix<double>* mat1 = new DynamicMatrix<double>(n * n,1);
for (int i = 1 ; i <= n; i++){
for (int j = 1; j <= n; j++){
mat1->set((i-1)*n +j, 1, 0);
}
}
return *mat1;
}
Итак, вызов ошибки 'delete X0', потому что для этого нужен указатель. 'delete & X0' говорит, что освобожденный указатель не был выделен. Как правильно это сделать? Или я что-то не так делаю? При слишком больших матрицах и слишком большом количестве итераций на моем жестком диске large не хватает места, что я могу предположить только из-за большого количества утечек памяти.