我正在我的项目上运行 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 表达式(即 if (condition) { expression-block = 条件变量的生命周期}。
VS 已经愉快地编译(并且可能会运行它)很长一段时间了。我已经很久没有这样的单步代码了,但据我所知,如果 select_image 的运算符 bool() 返回 true,它只会进入 if 块,并且在退出 if 块时会破坏 select_image 的实例。
PREfast 错了吗?或者这里有什么微妙的东西使我上面的代码和假设不正确?