这很可能有一个非常简单的答案,但我无法弄清楚。
我正在尝试重构一些看起来像这样的代码:
SAFEARRAY* psa;
long* count;
HRESULT hr = pSomeInterface->ListSomething(&psa, &count);
if (SUCCEEDED(hr))
{
CComSafeArray<BSTR> sa;
if (*count > 0)
{
sa.Attach(psa);
}
}
// perform operations on sa
// allow CComSafeArray to destroy the object
return hr;
我想将代码更改为:
CComSafeArray<BSTR> sa;
long* count;
hr = pSomeInterface->ListSomething(&(sa.m_psa), &count);
if (SUCCEEDED(hr))
{
// perform operations on sa
}
但是当我执行这个时, sa 包含垃圾。发生了什么,为什么?什么是正确的语法?