-
객체 포인터배열의 동적할당과 해제backup/c,c++ 2010. 1. 11. 20:58
열혈강의 C++ OOP5를 하다가 문득 알게됐다.
책의 예제코드에서는 객체포인터 배열을 해제하는 코드가 없는 것이다.
순간, 고민에 빠졌다. 동적할당을 하면 반드시 해제를 해주라는 필자의 의도와 반대로 왜 이 코드안에는
해제코드가 없는 것일까....
다음은 내가 내린 결론과 잊지않기 위한 정리다.
결론은 프로그램 내에서 동적할당을 한 후에 해제를 해주지 않으면 프로그램 종료 후 시스템에서
자동으로 메모리를 반환한다. 더구나 이 코드안의 객체포인터배열은 프로그램 종료직전까지 사용을 한다.
따라서 직접 해제를 해 주지 않아도 크게 상관은 없기 때문에 필자가 생략했다는 것이다.
물론 아무때나 해제를 생략해도 되는 것은 아니다. 동적할당 후 해제를 해 주지 않으면 프로그램 진행 중에
메모리 누수로 부족해 질 수 있기 때문에 기본적으로 해제를 해주는 것이 반드시 필요하다.
또 하나 고민했던 것이 객체 포인터배열을 해제 할 경우 객체가 소멸되느냐....어찌보면 당연한 말인데
괜히 깊은 고민을 하다보니 뻔한것도 의심을 했던 것 같다.
정리를 해보자면
직접 메모리를 해제시켜 줄 경우배열에 저장된 모든 객체들의 소멸자가 호출되면서 소멸이 일어나고 그 후에 메모리를 반환한다.
만일 직접 해제를 해 주지 않을 경우에는 프로그램이 종료된 후에 시스템에서 할당받은 메모리를 반환한다.