比方說,我有一個充當「智能指針」的類,並在銷燬時釋放某種系統資源。構造函數返回值的異常
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()構造函數,但我並不完全確定它。這是一個正確的假設嗎?