У меня есть класс, который представляет собой матрицу и несколько операций над матрицами. Я пытаюсь перегрузить *
оператор для умножения двух матриц.
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;}
Обе матрицы имеют квадратную форму, поэтому первая часть состоит в том, чтобы просто убедиться, что они имеют одинаковый размер. Это работает, но как мне удалить временную матрицу после ее возвращения в другой объект матрицы?
Ты не должен. Он автоматически уничтожается.
Вы должны только delete
объекты, которые вы выделили new
,
Вообще используя сырье new
а также delete
не одобряется в современном C ++. Взгляни на std::unique_ptr
а также std::shared_ptr
для альтернатив. (Они не нужны в вашем примере)
«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