2017-12-07 23 views
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オブジェクトを返します。

+2

潜在的な問題は、 'wstring'を構築すると' bad_alloc'がスローされる可能性があります。これは元の例外の処理中に発生すると問題になります。 –

+0

正しいですが、 'bad_alloc'については(https://stackoverflow.com/a/9456758/6923555)心配すべきですか? – Rodrigo

+0

はい、bad_allocについて心配する必要があります。例外を処理せず、一般的なキャッチされていない例外ハンドラにエスケープさせ、RAIIとスタックアンワインディングでデータの一貫性を確保することが重要です。コードの呼び出しをstd :: terminateとし、データを失う可能性もあります。 –

答えて

0

質問以下のコメントに基づいて、私はそれがwstringを構築する際ための潜在的bad_alloc調達のため、このクラスを使用する悪い考えだということに同意するものとします。

関連する問題