new
와 malloc
둘 다 동적으로 메모리를 할당을 위해서 사용한다.
메모리를 해제하기 위해서는
new
는 delete
malloc
은 free
를 해주면 된다.
malloc
과 free
는 라이브러리에서 제공하는 함수이다.
하지만 new
와 delete
는 c++언어에서 제공하는 키워드이다.
malloc
은 메모리를 동적으로 할당하는 것만 하지만, new
는 메모리를 동적으로 할당함과 동시에 초기화가 가능하다.
그렇기에 malloc
으로 객체를 동적할당하면 생성자가 안 호출되지만,
new
로 객체를 동적할당하면 생성자가 호출된다.(delete
만나면 소멸자를 호출한다.)
malloc
같은 경우는 메모리를 해당 크기를 지정해줘야한다.
하지만 new
같은 경우는 메모리를 크기를 알아서 잡아준다.
malloc
은 void\*형
메모리 할당을 해준다.
즉 사이즈 지정을 해줘야 한다.(위에 나옴)
그리고 원하는 타입으로 바꾸기 위한 캐스팅
이 필요하다.
하지만 new
는 원하는 타입을 지정해서 할당하기 때문에 캐스팅
이 필요없다.
객체는 new
를 사용하는 편이 맞다.
하지만 재할당이 많이 일어나는 경우에는 malloc
으로 동적할당하는 경우가 나올 수 있다.
왜냐? new
로 할당 받은 공간은 realloc
같은 함수가 없어 다시 할당을 해줘야 하기 때문이다.
복사->삭제->할당 과정이 다시 일어난다.
하지만 malloc
은 realloc
이라는 함수를 통하여 할당 받은 공간을 간단히 재할당 할 수 있다.