[Data Structure] 동적할당된 배열을 늘리는 과정
예시 코드
#include <iostream>
int main() {
int* p = new int[5];
for (int i = 0; i < 5; i++) {
p[i] = i*2;
}
//
int* q = new int[10];
for (int i = 0; i < 5; i++) {
q[i] = p[i];
}
//
delete[] p;
p = q;
q = nullptr;
//
for (int i = 0; i < 5; i++) {
std::cout << p[i] << " ";
}
return 0;
}
동적할당된 배열의 전체 크기를 늘리는 로직에서 내부적으로는 아래의 과정을 거친다.
- 기존 p배열을 q배열로 복사
- p배열의 할당된 메모리 해제
- p를 복사된 q주소를 가리키게 함. (새로운 자동차로 이동)
- q을 삭제
delete[]와 delete의 차이?
포인터 배열의 동적할당 해제를 할때 []를 붙이곤 한다.
일반적인 동적 배열을 delete로 삭제해도 큰 문제가 없어보이지만, 꼭 []로 해제해야할 이유가 있다.
그건 클래스 타입의 동적 배열의 경우 delete로 삭제한다면 첫번째 클래스의 소멸자만 실행되고 나머지 원소들은 소멸자가 실행되지 않을것이다.
물론 일반적인 자료형 타입의 동적 배열도 []를 사용해 해제해주어야한다. 그렇지 않으면 첫번쨰 원소를 뺀 나머지 원소들이 메모리를 차지하고 있기 때문이다.