malloc 과 new에 대해서 질문입니다.

강현석@Naver의 이미지

이 둘의 차이가 정확히 무엇인가요?
간단하게 말해서 malloc은 함수고 new는 연산자인 건가요?
malloc과 new의 차이를 묻는 질문이 나온다면 어떤 형식으로 대답해야할지 모르겠어서 질문합니다.

익명 사용자의 이미지

new는 메모리 할당 후 클래스 생성자를 호출해줍니다. 그 외에도 세세한 차이점이 있겠지만 가장 큰 차이점은 이거인 것 같네요.

이우현의 이미지

위에 분이 말씀하신것도 있고 거기다가
생성할시 malloc은 직접 크기를 정의를 해 줘야 하지만
new와 같은 경우는 구조체 단위 등등으로 생성을 바로바로 할 수 있습니다.

struct myclass
{
int a;
int b;
}

myclass* mypointer = new myclass;

malloc의 경우에는

mypointer = (myclass*) malloc(8);
// 또는 malloc(sizeof(mylcass)); 이렇게 해도 좋습니다.

간단하게 요약을 하자면
1. malloc은 생성자와 소멸자의 호출이 일어나지 않는다.
// 데이터 관리하기가 불변해진다.
2. 생성시 데이터 크기를 일일이 정해줘야한다.
// 직접 숫자를 넣거나 sizeof라는 기능을 이용해서 크기를 직접 지정해 줘야한다.

Harzarics의 이미지

물론 malloc,new 둘 다 사용할 수 있지만 malloc은 realloc을 할 수 있다는 장점(버퍼 크기 수정), new는 생성자를 생성하고 자료형에 대해 자유롭죠. 따라서 c++에서는 new를 쓰고 버퍼사이즈 변경할 경우에는 malloc을 쓰는게 좋쵸.

HIGH RISK, HIGH RESULT.