이전엔 변수 선언을 통해 필요한 메모리를 할당하는 방식(정적 할당)이라면, 동적할당은 실행중에 힙 메모리에서 할당하는 방식을 말합니다. 이 덕분에 필요한 양이 상수로써 선언을 못하는 경우 매우 유용할 수 있습니다.
쉽게 말해, 메모리 동적할당을 하는 연산자이다.
자료형 *변수명 = new 자료형[인덱스값];
ex) int *example = new int[5];
사용자에 의해 메모리가 동적으로 할당이 되면 프로그램이 끝날 때까지 유지되므로, 메모리 공간 사용이 끝나면 메모리 낭비(누수)를 줄이기 위해 명시적으로 메모리 할당을 해제 해주어야한다. 이때 필요한것이 delete
연산자이다.
delete p; // 이는 변수형태를 해제
delele [] p; // 이는 배열형태의 해제
여기서 주의해야할 점이 배열의 형태인데, [ ] 대괄호를 해주지 않는다면 배열에 접근할 수 있는 첫번째 영역만 사라지는 것이다. 따라서 메모리 누수가 발생한다.
#include<iostream>
using namespace std;
int main() {
int count;
cin >> count;
int* a = new int[count]; //new 연산자 동적 메모리 생성
for (int i{ 0 }; i < count; i++) {
cin >> a[i];
}
for (int i{ 0 }; i < count; i++) {
cout << a[i] << " ";
}
delete[] a; //delete 연산자
}
동적 메모리 할당의 최대 강점은 위의 코드처럼 배열의 index값이 예측이 안되는 경우, 동적 메모리 할당을 통해서 해결할 수 있다는 점에 있다고 생각한다.