2012-10-18 3 views
1

를 호출 한 후, [] 메모리를 삭제하는 방법. 두 개의 행렬을 곱하기 위해 * 연산자를 오버로드하려고합니다. 첫 번째 부분은 그들이 size.This 작동 동일로하지만 그것은 또 다른 행렬 객체에 반환 한 후 어떻게 임시 행렬을 삭제해야합니다 있는지 확인하기 위해 단지 그래서수익이 나는 행렬에 매트릭스 여러 작업을 나타내는 클래스가

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

행렬들 모두 정사각형?

+7

'new [] 또는'new []'를 사용하여 아무 것도 할당하지 않으므로'delete []'를 왜 호출해야합니까? 너는 필요 없어. –

+0

실제로 행렬에 동적 메모리를 할당하는 경우 해당 생성자에서이를 수행하고 소멸자에서 메모리를 할당 해제해야합니다. – Telgin

+0

소멸자 및 복사 생성자를 올바르게 정의했다고 가정 할 때 코드가 작동합니다. 이 작업을 완료하면 [] 메모리를 삭제할 필요가 없습니다. – john

답변

3

당신은 안된다. 자동으로 삭제됩니다.

당신이해야 당신이 new 할당 한 경우에만 delete 객체.

일반적으로 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