Programming Language/C,C++

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

TwinParadox 2018. 2. 10. 13:36
728x90

C를 배우고 C++로 넘어와서 동적할당을 하다 보면, 아주 자연스럽게 C++에서는 new만 사용하게 된다.

모든 걸 신경 써야 하는 malloc과는 다르게 타입 지정도 필요 없고 할당해버리면 끝인 new만 사용하면 그만이라고 생각하기에는 너무 막연하고 쉽게 넘어가는 것 같아 이 둘의 차이점에 대해서 정리해두고자 한다.



malloc은 라이브러리에서 제공하는 함수, new는 연산자다.

malloc은 함수로, 원하는 만큼의 메모리를 sizeof()를 이용해 바이트 단위로 할당해 void* 형식으로 반환한다. 그렇기 때문에 적합한 형식으로 지정해주어야 하는 캐스팅 과정이 필요하다.

new는, 함수가 아니라 연산자로 메모리의 사이즈와 형식을 지정해 해당 타입의 포인터를 반환하므로, 형식을 지정해주지 않아도 되기 때문에, 캐스팅이 따로 필요하진 않고 동일한 타입으로 할당하기만 하면 된다.


malloc은 할당과 동시에 초기화가 불가능하지만, new는 가능하다.

malloc의 존재 목적이 메모리 할당에 있기 때문에 초기화를 동시에 하는 건 불가능하지만, new는 할당과 동시에 값 초기화가 가능하다.


malloc은 생성자를 호출하지 않지만, new는 생성자를 자동 호출한다.

이 부분을 알게 되면 더 이상 C++에서 malloc을 사용하지 않게 된다. malloc이 해주지 못하는 것들, 즉 프로그래머가 신경써야 하는 부분들을 new는 대신해주기 때문에 여러모로 유용하다. 아무래고 클래스를 사용하고, 객체를 할당하고 해제하는 경우라면 malloc/free가 아닌 new/delete를 사용하는 것이 좋겠다.


malloc은 realloc 함수를 이용해서 사이즈 재할당이 가능하다.

realloc을 통해 size를 재할당할 수 있다. new는 메모리를 해제하고 새로운 사이즈를 할당해주는 방법으로 대신한다.


728x90