반응형

 

특징 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

+ Recent posts