"스마트 포인터"로 작동하고 클래스가 파괴 될 때 어떤 종류의 시스템 리소스를 해제하는 클래스가 있다고 가정 해 보겠습니다.함수 내에서 생성자에 대한 값을 반환하는 예외
Resource resource(allocateHandle());
및 allocateHandle (: 내 코드에서이 작업을 수행 할 경우, 지금
ResourceHandle allocateHandle();
:
class Resource{
protected:
ResourceHandle h;
public:
Resource(ResourceHandle handle)
:h(handle){
}
~Resource(){
if (h)
releaseResourceHandle(h);//external function, probably from OS
}
};
와 나는 "자원"의 초기화에 사용되는 값을 반환하는 몇 가지 기능이) 은 예외을 던졌습니다. 정확히 무슨 일이 벌어 질까요? 추락은 자원()의 건설 도중 또는 건설 전에 발생합니까?
상식은 allocateHandle이 반환되기 전에 예외가 발생하기 때문에 실행은 Resource() 생성자로 들어 가지 않지만 정확히 그것에 대해 확신하지 못한다고합니다. 이것은 올바른 가정입니까?