Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

zyeon's 작심삼일 코딩 공부

new delete 본문

c++ 정리

new delete

젼뀨 2024. 8. 9. 01:55

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