미누에요
[C++] malloc과 new 의 차이점 본문
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
'C++' 카테고리의 다른 글
[C++] friend (0) | 2024.06.28 |
---|---|
[C++] 복사 생성자 (Copy Constructor) (0) | 2024.06.27 |
[C++] 문자열을 나타내는 방식, const char*, char*, string (0) | 2024.05.25 |
[C++] 윤성우의 열혈 C++ 11-2 C++ 기반의 데이터 입출력 문제풀이 (1) | 2024.05.21 |
[C++] 윤성우의 열혈 C++ 11-1 깊은 복사를 하는 대입 연산자의 정의 문제풀이 (1) | 2024.05.16 |