0
:これまでのところ、これは私のために働いたstd :: runtime_error例外へのwstringラッパー?私は、これらの機能は、どこかで定義されていると仮定すると
class runtime_error_w : public std::runtime_error {
public:
runtime_error_w() = default;
runtime_error_w(const wchar_t* what_arg)
: runtime_error(ws_to_s(what_arg)) { }
runtime_error_w(const std::wstring& what_arg)
: runtime_error(ws_to_s(what_arg)) { }
virtual const std::wstring what_w() const noexcept {
return ws_to_s(what());
}
};
が、この方法に問題があります:
std::string ws_to_s(const wchar_t*);
std::string ws_to_s(const std::wstring&);
std::wstring s_to_ws(const char*);
私はこのクラスを書きましたの?
what_w()
は、const char*
ではなく、std::string
オブジェクトを返します。
潜在的な問題は、 'wstring'を構築すると' bad_alloc'がスローされる可能性があります。これは元の例外の処理中に発生すると問題になります。 –
正しいですが、 'bad_alloc'については(https://stackoverflow.com/a/9456758/6923555)心配すべきですか? – Rodrigo
はい、bad_allocについて心配する必要があります。例外を処理せず、一般的なキャッチされていない例外ハンドラにエスケープさせ、RAIIとスタックアンワインディングでデータの一貫性を確保することが重要です。コードの呼び出しをstd :: terminateとし、データを失う可能性もあります。 –