Minwoo Dev.

[C++] malloc과 new 의 차이점 본문

C++

[C++] malloc과 new 의 차이점

itisminu 2024. 6. 25. 23:16
728x90
반응형
SMALL

C++을 공부하다 보면 C언어에서부터 사용하던 malloc과 new가 헷갈릴 수 있다.

new와 malloc의 차이점에 대해서 작성해보았다.

 

 

malloc

C언어에서 동적 할당을 사용할 때 사용하였다.

  • malloc은 지정된 바이트 수 만큼 메모리를 할당한다.
  • malloc은 초기화를 진행하지 않고 할당만을 수행한다.
  • malloc은 "함수"이다.
int* ptr = (int*)malloc(sizeof(int));  // 단일 정수형 변수 할당
*ptr = 5;
free(ptr);                             // 메모리 해제

int* arr = (int*)malloc(10 * sizeof(int)); // 정수형 배열 할당
free(arr);                                // 배열 메모리 해제

 

위처럼 malloc은 (int*)과 같은 반환 타입을 명시해주어야 하며, sizeof(int) 처럼 크기도 명시하여 사용하게 된다.

malloc으로 생성한 동적 할당을 realloc으로 재할당할수도 있다.

free()를 사용하여 동적 할당을 해제한다.

 

 

new

C++에서 추가된 기능으로, 동적할당 외에도 객체 생성 등에 사용된다.

메모리 할당만을 담당하는 malloc이 C++에 존재하는 "객체"라는 개념을 수용하지 못하기 때문에 new라는 키워드가 생성된 것이다.

  • new는 기본적으로 객체를 초기화한다.
  • new는 객체 생성과 함께 메모리를 할당한다.
  • 예를 들어 new int는 int* 타입으로 객체를 초기화하고 int* 타입을 반환한다.
  • new는 "연산자"이다.
int* ptr = new int;       // 단일 정수형 변수 할당
*ptr = 5;
delete ptr;               // 메모리 해제

int* arr = new int[10];   // 정수형 배열 할당
delete[] arr;             // 배열 메모리 해제

 

new int를 사용하여 int* 타입의 객체를 반환한다.

new 키워드로 동적할당한 객체는 delete로 해제할 수 있다.

new 키워드로 배열 형태를 생성한 경우에는, delete[] 이름  으로 동적 할당을 해제한다.

 

 

 

 

 

결론적으로 C++에서는 new 키워드를 더 많이 사용하게 될 것이다.

동적 할당 외에 객체 생성의 역할도 new 키워드를 사용하게 되니 눈여겨 봐두자.

 

728x90
반응형
LIST