Minimal Code, um das Problem reproduzieren:Warum verwendet der Compiler eine temporäre Variable?
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
CComBSTR ccbTest(L"foo");
const wchar_t * pTest = ccbTest ? ccbTest : L"null string";
return 0;
}
Der Compiler verwendet eine temporäre CComBSTR
, wenn es einen Zeiger in pTest
speichern möchte. Es verwendet dann die BSTR
Konvertierung, die in der CCcomBSTR
Klasse mit dem temporären verfügbar ist, und speichert den Zeiger in pTest
. Dann wird das temporäre zerstört, und ich bin mit einem baumelnden Zeiger in pTest
verlassen.
Das Update ist die CComBSTR
würfen
const wchar_t * pTest = ccbTest ? static_cast<BSTR>(ccbTest) : L"null string";
Ich verstehe nicht, warum das Update erforderlich ist. Ich dachte, dass der Compiler nur versuchen würde, selbst zu BSTR
zu konvertieren. Warum ein temporäres?
Bitte versuchen Sie meinen Code, debuggen und treten Sie in die Anrufe: Es gibt ein temporäres, auch wenn Sie es nicht "sehen" :-) – manuell