如何调用返回后删除[]内存

How to delete[] memory after return has been called

本文关键字:删除 内存 返回 何调用 调用      更新时间:2023-10-16

我有一个代表矩阵的类,并且在矩阵上进行了多个操作。我试图将*操作员超载到乘以两个矩阵。

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;}

矩阵都是正方形的,所以第一部分只是检查它们的大小相同。这有效,但是在返回另一个矩阵对象后,我应该如何删除温度矩阵?

您不应该。它会自动销毁。

您应该仅使用new分配的delete对象。

通常使用RAW newdelete在现代C 中皱眉。查看std::unique_ptrstd::shared_ptr的替代方案。(在您的示例中不需要它们)

" temp"是一个局部变量,范围为您的功能,无需释放它的内存。它使用的内存在堆栈上,因此它是由函数后缀自动"释放"的(构成返回语句的基础代码)。

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