如何在调用return后删除[]内存

时间:2012-10-18 13:35:45

标签: c++ class free delete-operator

我有一个表示矩阵的类和矩阵上的几个操作。我试图重载*运算符以乘以两个矩阵。

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

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

2 个答案:

答案 0 :(得分:3)

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

您应该delete只有new分配的对象。

通常使用原始newdelete在现代C ++中不受欢迎。查看std::unique_ptrstd::shared_ptr的替代方案。 (在你的例子中不需要它们)

答案 1 :(得分:0)

"温度"是一个局部变量,作用于你的函数,没有必要释放它的内存。它使用的内存在堆栈中,因此它被释放了#34;由函数后缀自动生成(构成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