1

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

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

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

4

2 回答 2

3

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

您应该只delete使用已分配的对象new

通常使用 rawnew并且delete在现代 C++ 中不受欢迎。看看std::unique_ptrstd::shared_ptr寻找替代品。(您的示例中不需要它们)

于 2012-10-18T13:38:59.697 回答
0

“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
于 2012-10-18T13:42:40.550 回答