C언어를 배운 개발자라면 malloc()과 free()를 사용해 보았을 것이다.
C++에서도 malloc()과 free()를 사용할 순 있지만 C++에서는 동일한 기능을 좀 더 사용하기 쉽게 지원해주고 있다.
그것이 바로 new와 delete 연산자인데
malloc()과 free()와 동일하게 C++에서 new와 delete연산자는 객체를 동적 할당하고 해제하는 연산자이다.
1. malloc()와 new 의 차이점
C의 malloc(), calloc()과 C++의 new의 가장 큰 차이점이 몇 개 있는데
그 중 하나는 동적 할당할 메모리의 크기를 전달하지 않아도 된다는 점이다.
그렇기 때문에 malloc()으로 동적할당할 때마다 메모리 크기를 설정해주어야 하는 반면에(Ex. sizeof(int) * 5)
C++은 new 연산자 하나만 적어주면 된다.
다음으로는 new는 객체의 생성자를 호출한다는 것이다.
2. free()와 delete의 차이점
C의 free()와 C++ delete은 둘 다 동적 할당한 메모리를 해제하는 기능을 담당한다.
그러므로 free()와 동일하게 동적으로 할당한 메모리를 더 이상 사용하지 않는다면 delete를 사용해서 메모리를 해제시켜줘야 한다.
메모리 해제를 해주지 않는다면 사용하지 않는 메모리가 계속 남아있게 되어 메모리 부족 현상을 경험할 수 있다.
free()와 delete의 가장 큰 차이점이라 한다면
1. 동적 할당된 배열의 메모리를 해제할 경우 delete는 배열 형식으로 해제해주어야 한다는 것이다.
2. delete는 객체의 소멸자를 호출한다.
인스턴스로 사용
1
2
3
4
5
6
자료형* 인스턴스명 = new 자료형;
delete 인스턴스명;
// 사용 예시
int* a = new int;
delete a;
배열 인스턴스로 사용
1
2
3
4
5
6
자료형* 인스턴스명 = new 자료형[개수];
delete[] 인스턴스명;
// 사용 예제
int* a = new int[5];
delete[] a;