Как удалить [] память после вызова

У меня есть класс, который представляет собой матрицу и несколько операций над матрицами. Я пытаюсь перегрузить * оператор для умножения двух матриц.

matrix matrix::operator* (matrix param) {
if(n!=param.n){
matrix blah;
return blah;}

matrix temp(n,0);
temp.user_matrix=mult(param.user_matrix);
return temp;}

Обе матрицы имеют квадратную форму, поэтому первая часть состоит в том, чтобы просто убедиться, что они имеют одинаковый размер. Это работает, но как мне удалить временную матрицу после ее возвращения в другой объект матрицы?

1

Решение

Ты не должен. Он автоматически уничтожается.

Вы должны только delete объекты, которые вы выделили new,

Вообще используя сырье new а также delete не одобряется в современном C ++. Взгляни на std::unique_ptr а также std::shared_ptr для альтернатив. (Они не нужны в вашем примере)

3

Другие решения

«temp» — это локальная переменная, ограниченная вашей функцией, нет необходимости освобождать ее память. Используемая им память находится в стеке, поэтому она автоматически «освобождается» с помощью суффикса функций (базовый код, который составляет оператор return).

void foo() {
int temp = 5;
return temp + temp;
}
;; x86 ASSEMBLY (NASM/FASM syntax)
foo:
SUB esp, 4 ;; <-- local memory for temp variable
MOV [esp], 5 ;; temp = 5
MOV eax, [esp] ;; eax = 5 (eax is the return-value register)
ADD eax, eax ;; 5 + 5
ADD esp, 4 ;; <-- "free" local memory for temp variable
RETN
0

По вопросам рекламы [email protected]