zyeon's 작심삼일 코딩 공부
new delete 본문
new도 malloc과 같이 메모리를 동적 할당하는데 사용한다.
따라서 malloc과 같이 힙 메모리 영역을 사용하고, 사용 후 할당을 해제해줘야 한다.
그렇다면 둘은 무슨 차이가 있을까?
메모리 할당 방식
int* m = (int*)malloc(sizeof(int) * 10); // malloc 메모리 할당
int* n = new int[10]; // new 메모리 할당
malloc은 void* 타입이므로, 사용할 때 캐스팅을 해줘야 한다.
하지만 new는 별도의 캐스팅이 필요하지 않다.
초기화
int* a = new int; // 단순 메모리 할당
int* b = new int(10); // 10으로 초기화한 객체 생성
MyClass* c = new MyClass(); // MyClass의 생성자 호출
malloc은 따로 초기화를 하지 않는다.
new는 객체를 기본 값으로 초기화해 줄 수 있고,
만약 객체가 클래스나 구조체일 땐 생성자를 자동 호출하여 초기화한다.
메모리 해제 방식
free(m); // malloc 메모리 해제
delete c; // new 메모리 해제, 소멸자 호출
delete[] n; // 배열 할당 시 배열 해제
malloc은 free로, new는 delete로 메모리를 해제해야 한다.
delete는 메모리 해제 전 객체의 소멸자를 자동 호출해준다.
malloc은 배열 할당 시 특별한 처리가 없지만, new 배열 해제시엔 delete[]를 사용해야 한다.
new와 delete는 C++에서 새로 도입된 연산자인 만큼, 클래스 및 구조체의 생성자와 소멸자를 자동으로 호출해 객체 지향적 특성을 갖고 있다는 점이 malloc과의 가장 큰 차이점인 것 같다.
'c++ 정리' 카테고리의 다른 글
함수 포인터 (0) | 2024.08.19 |
---|---|
동적할당 malloc() (0) | 2024.07.02 |
문자 자료형 wchar_t (0) | 2024.06.28 |
void 포인터 (0) | 2024.06.21 |
const와 포인터 (0) | 2024.06.21 |