2017-11-02 1 views
1

delete [] arr은 ar이 C++에서 작성된 함수 외부에서 호출 된 경우 메모리를 해제합니까?delete [] arr은 ar이 C++에서 작성된 함수 외부에서 호출 된 경우 메모리를 해제합니까?

나는이

double* f() 
    { 
    double* arr = new double[100]; 
    return arr; 
    } 

void ff() 
{ 
double* arr = f(); 
delete [] arr; 
} 

같은 것을했을 경우 내 말은 ff()에서 제대로 삭제 ARR 할 것인가?

+3

입니다. 그러나 대신'std :: vector' 또는 스마트 포인터를 사용하는 것을 고려해보십시오. –

+1

예, arr이 삭제됩니다. 그러나 이런 종류의 메모리 관리는 좋지 않습니다. – HatsuPointerKun

+0

예. 포인터 추적을 잃지 않는 한. – Steve

답변

3

예, 제대로 삭제됩니다 (delete과 동일). 포인터를 추적하는 동안 메모리가 할당 된 함수 밖에서 포인터를 삭제할 수 있습니다.

+0

'delete'와 동일합니까? 너 무슨 뜻이야? –

+0

만약 OP가'delete []'가 약간 생각했다면 (OP가'new ... []'대신에'new '대신에 할당 되었다면)'delete'가이 시나리오에서 같은 방식으로 작동한다는 것을 명확히 밝히고 싶었습니다 여기 다른. – frslm

2

예. new (및 new [])는 포인터를 반환하고 해당 포인터는 해당 삭제 (delete [])에서 사용해야합니다.

관련 문제