다음 이전 차례

4. C++ Zap (Delete) 명령어

C++ 의 delete 과 new 명령어는 "C"의 malloc 과 free 함수보다 훨씬 낫다. malloc 과 free 대신에 new 와 zap (delete) 명령어를 가능한 많이 쓰도록 하자. delete명령어를 더 확실히 사용하기 위해서 Zap() 명령어를 만들자. zap() 명령어는 다음과 같이 정의될 수 있다.


/* 
**완벽하고 튼튼한 매크로를 만들기 위해 do while 을 사용한다.
**예를 들어, 만약 "do-while"을 쓰지 않으면, 다음과 같이 될
**것이다  
** if (bbint == 4)
**              aa = 0
** else
**              zap(aptr); //문제발생! aptr이 항상 NULL로 될 것이다
*/

#define zap(x) do { delete(x); x = NULL; } while (0)

자 이제 모든 포인터들이 널 포인터로 생성된다고 가정을 한다면 일련의 zap() 명령어로 다음과 같이 new로 생긴것들을 안전하게 삭제 할 수 있고 아직 new로 생기지 않은 것들을 지우지 않을 수 있다. 예를 들어,
        zap(pFirstname);
        zap(pFirstname); // no core dumps !! Because pFirstname is NULL now
        zap(pFirstname); // no core dumps !! Because pFirstname is NULL now

        zap(pLastname);
        zap(pJobDescription);

이것은 전혀 신기한 것이 아니다. 이것은 단지 반복되는 코드를 세이브하고 더 읽기 좋게 만드는 것이다. zap() 명령어에서 typecast에 집착하지 마라 - 만약 zap() 명령어 위에서 뭔가 에러가 생기면 그건 어딘가에서 다른 에러가 있을 가능성이 크기 때문이다. 또한 my_malloc() , my_realloc() 그리고 my_free()는 더 깨끗하고 additional checks이 있기때문에 malloc(), realloc() and free(), 대신에 사용되어야 한다. 예를 들어 my_malloc() 과 my_free() 함수를 사용한 mychar.h" 보라. 주의: 'new' 로 잡혀진 메모리을 free()로 풀거나 또눈 malloc으로 잡혀진 메모리를 'delete' 풀지마라. 이렬 경우 결과를 예측할 수 없다.
다음 이전 차례