반응형



우선 가장 정답에 대해서 말하자면 포인터를 선언할때는 


1. 변수 선언시 NULL로 초기화 해줘야 한다.

2. new 로 생성한 객체를 delete 한 뒤에는 NULL로 다시 초기화 해준다.


위와 같은 사실 이전에 한가지 의문이 있는데

delete는 NULL pointer에 대해 safe 한가?


MEC++ (More Effective C++)에는 C++ 에서는 safe to null pointer 라고 명시되어 있다.

즉 NULL 포인터를 delete를 해도 null pointer exception error가 발생하지 않는다는 것.


즉 이러한 코드는 필요가 없는 것이다.

if(var) delete var;


일단 테스트 해본 결과 메모리 릭이 발생하는 것은 아니지만 일반적으로 매크로를 사용해서 NULL로 다시 초기화 해준다. 

(디버깅이 문제가 될 수 있어 template나 공용함수를 사용해도 무방)

#define SAFE_DELETE(var)    { delete var; var = NULL; }



반응형

+ Recent posts