C에서는 free와 malloc을 가지고 메모리 분배를 하였지만 이능 굉장히 비효율적이고 코드의 가독성을 엄청나게 떨어트리는 주범이었다.
이를 극복하기위해 C++에서는 new와 delete라는 명령어가 생겼다. 이름에서도 알수 있듯이 new는 메모리 할당이고 delete는 메모리 회수다 ㅋㅋ
1차원 array일 경우에는 메모리 할당과 회수가 아주 쉽다.
int n = 100;
int *a;
a = new int [n]
...
delete []a;
int *a;
a = new int [n]
...
delete []a;
2차원일때는 조금 복잡하다ㅋㅋ
int n = 100, m = 200;
//분배 시작
int **a;
a = new int *[m];
for(int i=0; i<m; i++)
{
a[i] = new int [n];
}
//분배완료
...
//회수 시작
for(int i=0; i<m; i++)
{
delete []a[i];
a[i] = NULL;
}
delete []a;
a = NULL;
//회수 완료
//분배 시작
int **a;
a = new int *[m];
for(int i=0; i<m; i++)
{
a[i] = new int [n];
}
//분배완료
...
//회수 시작
for(int i=0; i<m; i++)
{
delete []a[i];
a[i] = NULL;
}
delete []a;
a = NULL;
//회수 완료
똑같은 방법을 사용해서 3,4,5,...차원 array를 정의할수 있다 ㅋㅋ
아 그리고 여기서 분명히 왜 int a[100]이런 방법을 안쓰고 new혹은 malloc을 사용하는게 좋은지 물어보는 사람들이 있을거다. 분명 int a[100] 이라는 방식은 굉장히 편하다. 하지만 이 방법은 공간의 크기를 상수로 정해줄수밖에 없다. 즉
int n = 100;
int a[n];
int a[n];
위와 같은 명령은 에러로 간주된다. 왜냐하면 n은 상수가 아니기 때문이다. 하지만 new나 malloc은 []괄호 안에 꼭 상수를 안 써넣어도 사용할수 있다.