0

(mpc 라이브러리의) 다중 값 변수를 동적으로 할당 한 배열을 사용하고 있는데 변수를 지우고 메모리 누수가 발생하지 않도록 배열을 삭제해야하는지 궁금하십니까? 즉, 아래의 발췌 문장에있는 모든 하우스 키핑이 필요합니까?다중 값 변수 지우기 및 삭제

using namespace std; 
#include <gmp.h> 
#include <mpfr.h> 
#include <mpc.h> 

int main() { 

    int i; 
    mpc_t *mpcarray; 
    mpcarray=new mpc_t[3]; 
    for(i=0;i<3;i++) mpc_init2(mpcarray[i], 64); 

    // Manipulations 

    for(i=0;i<3;i++) mpc_clear(mpcarray[i]); 
    delete [] mpcarray; 

    return 0; 
} 

답변

1

예, 필요합니다.

생활의 일반적인 규칙은 여기에 적용

는 "당신은 당신이 무엇을 사용 폐기해야한다!"

그렇게하지 않으면 mpc_t의 소멸자가 부작용을 생산하는 코드가 포함되어있는 경우가 정의되지 않은 동작 메모리 누수를 초래하거나 훨씬 더.

동적 메모리는 프로그램 당신에게 명시 적으로 메모리 관리를 제공하는 기능이며 (new 또는 new []를 호출)를 사용하는 경우 할당 해제를 delete 또는 delete []를 호출하여 적절한 사용을 (보장하는 것은 귀하의 책임입니다 각각).

동적 포인터 대신 자동/로컬 변수를 사용하는 것이 훨씬 낫다는 것에 유의하십시오.
필요한 경우 원시 포인터 대신 smart pointers을 사용해야합니다. 동적 메모리와 명시 적 메모리 관리 오버 헤드의 이점을 제공합니다.

+0

이렇게하면 더 명확 해집니다. 감사! – jorgen