동적메모리 할당은 정말, 아주 유용하다.
배열의 경우 변수명을 크기하는 배열을 선언 할 수 없다. 그 변수가 const 형 이라면 가능하지만 일반적으론 안된다.
그때 사용할 수 있는 것이 바로 동적 메모리 할당이다.
여기서 우린 동적 메모리 할당이 무슨 의민가. 우선 메모리 할당은 말 그대로 메모리를 할당 하는 것이다.
쉽게 말해 "메모리 얼마 쓸거니까 줘. " 란 의미가 된다.
그렇다면 동적은 무엇일까? 동적의 의미를 알기 위해 정적 메모리 할당과 동적 메모리 할당의 차이를 알아보자.
우선 정적 메모리 할당의 경우 흔히 생각하는 변수 선언을 예로 들 수 있다. 정적 메모리 할당의 경우 프로그램이 시작
하기전에 메모리가 얼마인지 이미 계산되는 경우를 말한다. 그리고 메모리의 반납또한 함수가 끝나면 강제적으로 반납
된다.
동적 메모리 할당의 경우 메모리의 할달은 자유자제로 할 수 있고, 해제 또한 사용자 마음대로 할 수 있다. 정적 처럼
함수가 끝난다고 해서 할당된 메모리가 반납되지 않는다.
이것이 정적과 동적의 차이다.
이제 동적 메모리 할당의 사용법을 알아보자.
우선 동적 메모리 할당에는 2가지 명령어가 있다.
new , delete 와 new[] , delete[] 이다. 이 두 명령어는 생김새 차이도 한끝 차이지만 실제 쓰이는 차이도 정말 한끝
차이다.
new , delete 의 경우 단순 변수에 명령어를 선언 할 때 사용된다. 쉽게 예제를 보자.
int* ptr = new int;
와 같이 단순 변수 정도의 크기를 할당하는데 사용된다.
new[] 의 경우는 배열크기의 메모리 할당을 하는데 사용된다. 예제를 보자.
int* ptr = new int[size];
이 경우는, ptr 변수에 size 크기를 가지는 배열을 만드는 것과 같은 의미가 된다. 이것이 new 와 new[] 의 차이다.
그렇다면 delete 는 무슨 명령어인가. 이 명령은 new 로 할당된 메모리를 해제할때 사용한다. 예를 보면
delete ptr;
과 같이 사용하면 된다. 반대로 new[] 로 메모리를 할당 했다면 ,
delete[] ptr;
로 사용 하면 된다. 이 차이다. 하지만 중요한건 new 로 할당한건 반드시 delete 로 해제 해야하고, new[] 로 할당된건
delete[] 로 해제해야한다.