KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
In paragraph " How should I design my exception classes? " in this " Error and Exception Handling " Boost web page, it reads: [...] 3. Don't embed a std::string object or any other data member or base class whose copy constructor could throw an exception. I have to define an exception class to represent some form of run-time error on file access, so I was thinking to derive it from std::runtime_error , and add a FileName() attribute to get access to the file name for which the error occurred. For simplicity sake, my intention was to add a std::wstring data member to store the file name (in Unicode), but the aforementioned suggestion kind of stopped me. So, should I use a simple wchar_t buffer as a data member? On modern desktop systems (which are my target platforms for this project), is it really important to pay attention to a dynamic string allocation for a file name? What is the likelihood of such allocation to fail? I can understand Boost's suggestion for limited-resource systems like embedded systems, but is it valid also for modern desktop PC's? // // Original design, using std::wstring. // class FileIOError : public std::runtime_error { public: FileIOError(HRESULT errorCode, const std::wstring& filename, const char* message) : std::runtime_error(message), m_errorCode(errorCode), m_filename(filename) { } HRESULT ErrorCode() const { return m_errorCode; } const std::wstring& FileName() const { return m_filename; } private: HRESULT m_errorCode; std::wstring m_filename; }; // // Using raw wchar_t buffer, following Boost's guidelines. // class FileIOError : public std::runtime_error { publ
Tags (comma-separated)
Save Edits
Cancel