Я бегу PreFast статический анализ кода на моих наших проектов, и это дает мне C6001 «с использованием неинициализированные памяти» ошибки для этой модели:Работает ли этот шаблон на C++?
// 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
Хитрость Я пытаюсь использовать это, чтобы позволить (if) (0)
VS счастливо скомпилирован (и предположительно запускает это) в течение некоторого времени. У меня нет ни одного так как это довольно долгое время, но, насколько я могу судить, он входит только в блок if, если оператор select_image bool() возвращает true, и он уничтожает экземпляр select_image после выхода из i f блок.
Является ли PREfast неправильным? Или здесь что-то тонкое, что делает мой вышеприведенный код и допущения неправильными?
Does 'AutoSelectGDIObejct()' возвращает ссылку? –
'AutoSelectGDIObejct' - это класс. Я использую ссылку, чтобы обойти тот факт, что C++ не позволит мне просто использовать 'if (AutoSelectGDIObject select_image (...))' <- не компилируется :( – Mordachai
Это не должно. причина: http://stackoverflow.com/questions/15580903/scope-of-an-inside-parenthesis-declared-object –