2012-10-18 53 views
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;} 

矩陣都是正方形所以第一部分是隻是爲了檢查它們是相同size.This作品,但我應該怎麼刪除臨時矩陣後,已恢復到另一個矩陣對象?

+7

你從來沒有使用'new'或'new []'分配任何東西,所以你想調用'delete []'?你不需要。 –

+0

如果您實際爲矩陣分配動態內存,則應該在構造函數中執行該操作,並在其析構函數中釋放內存。 – Telgin

+0

您的代碼將按照假定已正確定義析構函數並複製構造函數的方式工作。如果你已經完成了這個操作,沒有必要刪除[]內存。 – john

回答

3

你不應該。它會自動銷燬。

您應該只應使用delete已分配給new的對象。

通常使用原始的newdelete在現代C++中被詬病。看看std::unique_ptrstd::shared_ptr替代品。 (在你的例子中不需要它們)

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 
相關問題