동적 할당(new ~ delete)
우리가 앞서 배웠던 메모리 구조에서 힙 영역에 해당하는 부분이다. 힙 영역의 특징과 같이 크기에 상관이 없다.
C 스타일 언어에서 동적 할당에는 malloc, realloc, calloc, free와 같은 것들이 있지만, 우리가 배우는 C++ 스타일에서의
동적 할당은 new와 delete만 알면 된다.
우선 int자료형의 *p 변수는 main함수 안에 선언한 지역변수이므로 스택 영역에 저장이 된다.
그런데 우리가 동적 할당을 해주면 해당하는 값을 힙 영역에 담을 수 있게 된다.
*p에 new int(3)로 동적할당을 해주면, int형 정수 3이 힙 영역에 동적 할당되고, *p에는 그 주소가 담기게 된다.
그래서 첫 번째 cout 출력 시, *p에 담긴 주소 값이 가리키는 값인 3이라는 결과가 출력이 된다.
다음에 *p에 10의 값을 초기화시켰다. 이렇게 되면 *p에 담긴 주소 값을 타고 3의 값이 있던 곳으로 가서 10이라는 값으로
다시 초기화가 이루어지기 때문에, 다음 cout에서는 10이 출력되는 것을 볼 수 있다.
여기서 처음 동적 할당 시에 정한 자료형(int)에 맞는 값을 초기화시켜주어야 한다는 것을 알 수 있을 것이다.
하지만 앞서 메모리 관리에서 배웠던 것처럼 동적 할당을 사용하면 반드시 해제를 해주어야 메모리 누수의 문제를
방지할 수 있다고 배웠다.
따라서 new int(3)으로 동적할당을 했다면 delete p를 통해 반드시 할당 해제를 해주어야 한다.
배열도 동적 할당이 가능하다. 위 사진처럼 동적 할당을 통해 배열의 크기를 결정해주는 방식으로 할 수 있다.
그래서 위의 방식처럼 for문을 통해 배열 초기화 후에 출력을 하면 0 1 2 3 순서대로 값이 출력되는 것을 볼 수 있다.
배열도 마찬가지로 동적 할당한 배열을 해제를 할 때 delete를 사용해주면 되는데, [ ]를 붙여서 해제하는 것만 기억하자.
여기서 중요한 것은 원래라면 배열의 크기는 미리 지정해주어 컴파일 타임 때 작동하도록 해주었지만,
동적 할당을 이용한다면 위 사진처럼, 런타임 때 배열의 크기를 지정해줄 수 있다는 점이다.
'C++' 카테고리의 다른 글
C++ 배우기 16(함수 오버로딩) (0) | 2022.11.02 |
---|---|
C++ 배우기 15(더블 포인터, 참조형, 함수 호출 방식) (0) | 2022.11.01 |
C++ 배우기 13(메모리 관리) (0) | 2022.10.31 |
C++ 배우기 12(포인터) (0) | 2022.10.28 |
C++ 배우기 11(메모리 구조) (0) | 2022.10.26 |