*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의 변용 함수들이 워낙 많기 때문에 이들을 잘못 섞어 혼용될 위험성은 다분이 있다.