Home [C++] new 와 delete 연산자
Post
Cancel

[C++] new 와 delete 연산자

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;
This post is licensed under CC BY 4.0 by the author.

[UE5 TPS 제작기] 13. 발사체(Projectile)를 이용한 총 쏘기 구현

[C++] 참조자 형식