Допустим, у меня есть класс, который действует как «умный указатель» и освобождает некоторый системный ресурс при уничтожении.
class Resource{
protected:
ResourceHandle h;
public:
Resource(ResourceHandle handle)
:h(handle){
}
~Resource(){
if (h)
releaseResourceHandle(h);//external function, probably from OS
}
};
И у меня есть некоторая функция, которая возвращает значение, используемое для инициализации «Ресурса»:
ResourceHandle allocateHandle();
Теперь, если я сделаю это в своем коде:
Resource resource(allocateHandle());
И allocateHandle () выдает исключение , что именно произойдет?Произойдет ли сбой во время создания Resource () или перед созданием?
Здравый смысл подсказывает мне, что поскольку исключение выдается до возврата allocateHandle, выполнение даже не войдет в конструктор Resource (), но я не совсем уверен в этом.Это правильное предположение?