プロジェクトで PREfast 静的コード分析を実行していますが、次のパターンで C6001 'using uninitialized memory' エラーが発生します。
// AutoSelectGDIObject is a class
if (AutoSelectGDIObject & select_image = AutoSelectGDIObject(hDCImgSource, hBmp))
{
// use hDCImgSource knowing that hBmp is selected into it
}
// now we are guaranteed that hDCImgSource has had hBmp removed and its previous bmp re-selected into itself
私が利用しようとしているトリックは、select_image のスコープを if-expression だけに許可することです (つまり、if (条件) { expression-block = 条件変数の有効期間 })。
VS はかなり長い間、問題なくコンパイル (およびおそらくこれを実行) してきました。私は長い間このようなコードをステップ実行していませんでしたが、私が知る限り、select_image の演算子 bool() が true を返す場合にのみ if ブロックに入り、if ブロックを終了すると select_image のインスタンスを破棄します。
PREfast は間違っていますか? または、上記のコードと仮定が正しくない微妙なものがありますか?