Passing the address of an initialized CComBSTR to a function as an [out] parameter causes a memory leak.
In the example below, the string allocated to hold the string "Initialized" is leaked when the function MyGoodFunction replaces the string.
CComBSTR bstrLeak(L"Initialized");
HRESULT hr = MyGoodFunction(&bstrLeak);
To avoid the leak, call the Empty method on existing CComBSTR objects before passing the address as an [out] parameter.
Note that the same code would not cause a leak if the function's parameter was [in, out].