Minimal kod odtworzenia problemu:Dlaczego kompilator używa zmiennej tymczasowej?
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
CComBSTR ccbTest(L"foo");
const wchar_t * pTest = ccbTest ? ccbTest : L"null string";
return 0;
}
Kompilator korzysta z tymczasowej CComBSTR
gdy chce zapisać wskaźnik w pTest
. Następnie używa konwersji BSTR
dostępnej w klasie CCcomBSTR
, z tymczasowym, i przechowuje wskaźnik w pTest
. Następnie tymczasowy jest zniszczony, a ja pozostaję z wiszącym wskaźnikiem w pTest
.
Rozwiązaniem jest do oddania CComBSTR
:
const wchar_t * pTest = ccbTest ? static_cast<BSTR>(ccbTest) : L"null string";
Nie rozumiem dlaczego poprawka jest konieczna. Pomyślałem, że kompilator po prostu spróbuje sam przekonwertować na BSTR
. Dlaczego tymczasowy?
Proszę wypróbować mój kod, debugować i nawiązać połączenia: jest tymczasowy, nawet jeśli go nie "widzisz" :-) – manuell