1

行列と行列に対するいくつかの操作を表すクラスがあります。演算子をオーバーロードして、 *2 つの行列を乗算しようとしています。

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_ptrとを参照してください。std::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 に答える