본문 바로가기

Software/C/C++

[C++] malloc과 free보다는 new와 delete를 사용한다.

*malloc과 free/ 그 변종들의 단점

-이들은 생성자(constructor)와 소멸자(destructor)의 존재를 모른다.

 예)10개의 string 객체의 공간을 얻기 위한 방범

<case 1>String *stringArray1 = static_cast<String*>(malloc(10*sizeof(String)));
 <case 2>String *stringArray2 = new String[10];

case1은 10개의 string 메모리 공간을 정확하게 확보를 했다. 그러나 바로 사용 할 수 없다.

초기화가 되지 않았다. 또, 초기화를 위해 각각의 점핑을 통해 일일이 초기화를 해주어야 한다.

위의 코드를 Build6.0에서 수행해보면 아래와 같다.

                     0         1      2        3        4       5        6       7       8        9

stringArray1 =[0x05][0x05][0x05][0x05][0x05][0x05][0x05][0x05][0x05][0x05]

stringArray2=[NULL][NULL][NULL][NULL][NULL][NULL][NULL][NULL][NULL][NULL]


-설사 초기화를 했다고 해도, 다음과 같은 문제에 직면하게 된다.

free(stringArray1);      //메모리를 해제 하지만 소멸자가 호출된것은 아니다. 그냥 손만 놓은 것

delete [] stringArray2; //일일이 소멸자가 호출되어 삭제를 하게된다.


+new와 delete는 생성자 및 소멸자와 적절히 상호동작하기 때문에 그들은 분명히 탁월한 선택이다.

*new와 free의 혼용의 위험

-사실 이결과 어떤한 위험이 초래될 수는 알기 어렵다.

+mallco과 free의 변용 함수들이 워낙 많기 때문에 이들을 잘못 섞어 혼용될 위험성은 다분이 있다.