我正在研究一個簡單的類來管理HKEY
的生命週期。一個有效的例外情況造成分解器
class Key
{
HKEY hWin32;
public:
Key(HKEY root, const std::wstring& subKey, REGSAM samDesired);
Key(const Key& other);
~Key();
Key& operator=(const Key& other);
Key& swap(Key& other);
HKEY getRawHandle() { return hWin32; };
};
//Other Methods....
Key::~Key()
{
LONG errorCheck
= RegCloseKey(hWin32);
/*
* I know it's generally bad to allow exceptions to leave destructors,
* but I feel that if RegCloseKey() is going to fail, the application
* should be terminated. (Because it should never fail.)
*/
if (errorCheck != ERROR_SUCCESS)
WindowsApiException::Throw(errorCheck);
}
這是否有效的推理?我不知道RegCloseKey()
的失敗怎麼傳達給被調用者。
作爲一名C#程序員,這是有道理的。 – ChaosPandion 2010-02-09 01:22:51
@ChaosPandion:C#討厭像析C++一樣從析構函數拋出異常嗎?我不確定... – 2010-02-09 01:24:31
爲什麼還要拋出異常?如果'RegCloseKey'失敗會發生什麼,你會忽略它? – 2010-02-09 01:27:31