특징 | new/delete | malloc/free |
할당된 메모리 | dynamic memory | heap |
반환 값 | 해당 타입의 포인터 | void * |
실패 | Throw ( null을 리턴하지 않음) | null |
배열 | 컴파일러에 의해서 계산됨. | 특정 숫자로 지정해줘야함. |
재할당 | 복사 생성자로 인해서 재할당은 delete후에 다시 new로 할당해줘야함 | realloc으로 재할당 |
재정의 | 사용자에 의해 new/delete 정의 | malloc/free는 재정의 불가 |
Overload | new는 operator로 가능 | malloc은 function으로 불가능 |
https://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free
1. malloc/ free는 라이브러리가 제공하는 함수이지만 new/delete는 언어가 제공하는 연산자 이다. 즉, 별도의 라이브러리 없이 사용이 가능하다.
2. malloc은 기본적으로 사이즈를 매개변수로 받고, 반환타입이 void*형 이므로 sizeof와 캐스트 연산자의 도움을 받아야 코딩이 가능하다.
하지만 new는 타입을 지정하면 알아서 할당타입의 포인터로 넘어오기 떄문에 할당 타입의 포인터를 변수로 받아오면 된다.
Class* p = (Class*)malloc(sizeof(Class));
와
Class* p = new Class;
의 차이라고 보면된다.
3) malloc은 메모리를 동적으로 할당하는 것만이 목적이므로 초기값을 지정해 줄 수 없지만, new의 경우는 할당과 동시에 초기화가 가능하다.
::int* p = new int(12345678) 이렇게 할당과 동시에 초기화 할 수 있다는 점.
4) new 키워드는 생성자를 자동으로 호출하게 된다. 생성자는 객체를 자동으로 초기화 해주는 함수로, malloc과 new의 가장 큰 차이점이다.
이는 자동으로 delete를 호출하는 것과 free로 따로 호출해야하는것의 차이를 말해주기도 한다.
5. malloc은 realloc으로 크기를 바꿔 재할당 할 수 있지만 new는 기존 메모리는 해제한 후에 다시 할당해줘야한다.
++)
malloc은 입력받은 바이트 크기만큼 heap에 할당한다.
[참고]
http://skmagic.tistory.com/111
http://gony0916.tistory.com/1
'프로그래밍 > C, C++' 카테고리의 다른 글
[C++] 데이터 자료형 정리 와 WORD, DWORD (0) | 2022.06.14 |
---|---|
파일 입출력.(fseek, ftell, fwrite, fread) (0) | 2017.09.29 |
2차원 배열 포인터 (0) | 2017.09.07 |
#pragma pack -2 (0) | 2017.09.07 |
#pragma pack - 1 (0) | 2017.09.07 |