Coding Tip/C/C++
C/C++에서 NULL 포인터를 delete 하면 어떻게 되는가?
장피디
2013. 10. 15. 12:35
반응형
우선 가장 정답에 대해서 말하자면 포인터를 선언할때는
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; }
반응형