CDllImp::DeinitDllをnoexceptとマークする #1857
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR の目的
Sonar Cloudの無駄な警告を潰して、ツールが検出した「本当に問題のあるコード」を識別しやすくします。
カテゴリ
PR の背景
ここのprojectではコードの静的解析に Sonar Cloud を使っています。
検出されたバグを修正する試みが何度か行われてきました。
最近はやっていないようですが、現在 113 件のバグが放置されています。
https://sonarcloud.io/project/overview?id=sakura-editor_sakura
今回はこのうちの1つを対応したいと思います。
https://sonarcloud.io/project/issues?issues=AX-cH3QqiOmgBqQJ-eXH&open=AX-cH3QqiOmgBqQJ-eXH&id=sakura-editor_sakura
PR のメリット
PR のデメリット (トレードオフとかあれば)
仕様・動作説明
対象のコードは以下です。
DeinitDll
が例外を投げた場合に発生する問題についての警告です。「例外を投げるかもしれないメソッド」をデストラクタから呼び出しています。
対策として
DeinitDll
を「例外を投げないメソッド(noexcept)」とマークします。修正により、上記警告が消えます。
noexceptを付けるデメリットは、「もし例外を投げたらクラッシュすること」です。
stringのメモリ拡張コードとか書けなくなります。
コードを見た感じ、そうなっても誰も困らなそうなので提案を出してみる次第です。
PR の影響範囲
CDllImp派生クラスのインスタンスを破棄する処理に影響する修正です。
アプリ終了時のタイミングにあたり、何か問題が起きたとしても普通は気付きません。
テスト内容
Visual Studioの出力ペインを睨みつけながら、
サクラエディタを起動して終了します。
出力ペインには何も出力されていないので致命的な問題は発生していないと思います。
関連 issue, PR
参考資料