{
.. 실패하지 않는다가 아니라. 실패해서는 안된다가 더 적당할 듯 싶다.
왜 그럴까? 각개 격파해서 정리한다.
디스트럭터에서 실패하면 왜 안되는가?
객체의 소멸 시점은, 자신이 속한 지역을 벗어 날 때이거나, 명시적으로 없애고자 할 때이다. 자신이 속한 지역에서 벗어 날 때는 무척 광범위한 영역에서 발생 할 수 있는데, 대표적으로 값에 의한 전달을 이용하는 함수에서 많이 일어 날 수 있을 것 같다.
값이 복사 되고 예외가 발생 했다고 치자. 이때 예외가 발생해서 지역을 탈출 하려고 하는데, 탈출 시 "스택 되감기"가 이루어 지면서, 다시 소멸자가 호출 되어 지고, 여기서 예외가 발생 한다 치자.
그러면 예외 중에 예외가 발생 한 것이니, C++ 에선 그냥 프로그램을 죽이는 함수를 호출 한다. 프로그램이 한순간 죽어 버린다면, .. 어찌하겠는가~
또한 표준 컨테이너에 객체들을 넣어 두었다가, 차례로 소멸 시킬 때 예외가 발생 한다면, 컨테이너에 소멸되지 않은 수 많은 메모리가 성불하지 못하고, 컴퓨터에 떠 다니는 꼴이 된다.
단순한 예로 배열에서도 같은 일이 일어 날 수 있다.
재할당, swap은 어떠한가?
위험성이 디스트럭터보다 컸으면 컷지 절대로 크진 않다. 컨테이너, 배열, 함수 호출 등에서 매우 불안불안 해 지게 된다.
그러면 어떻게 해야 하는가?
예외 발생이 되지 않게 코드를 짠다. ( ...... )
}
최근댓글