본문 바로가기

C++

C++ 면접 질문) delete[] 를 통해 얼마나 해제 할지 알 수 있는 이유는?

metadata 개념이 있다.

metadata에는 array에 몇 개의 element가 존재하는지 기록되어있다.

즉, stack에 있는 메모리 포인터가 얼마나 heap에 메모리를 할당하였는지 기록하고 있다고 볼 수도 있다.

 

그럼 metadata는 어디에 저장될까?

 

예시)

int* arr = new int[10];

 

라고 할 때, 10 개 정수를 저장 할 공간 외 metadata를 위한 추가 공간을 할당 한다.

 

meatadata는 new[]에 의해 반환 되는 memory address (heap) 의 앞부분에 위치하고 있다.

 

만약 delete[]에 의해 별도 정의한 class의 destructor가 불리는 상황이라면?

 

metadata에 적힌 element 수만큼 destructor가 불린다.