【发布时间】:2012-02-12 17:06:18
【问题描述】:
MSDN 文章只是说:
返回值
S_OK 成功,或任何标准 HRESULT 错误值。
但是,我的猜测是 E_OUTOFMEMORY 是唯一可行的错误返回,因为 NULL 是有效输入,而无效的内存位置只会引发访问冲突(希望如此)。
所以。这种方法还有其他可能的 HRESULTS 吗?
注意:以下均返回S_OK:
CComBSTR bstr;
bstr.AssignBSTR(NULL);
bstr.AssignBSTR(SysAllocString(L"")); //clearly a leak, abbreviated example...
bstr.AssignBSTR(SysAllocString(L"HI"));
底线:以下是好的做法(以及为什么我经常看到其他实现?):
class foo {
public:
STDMETHOD(put_Bar)(BSTR p);
private:
CComBSTR m_bstrBar
};
STDMETHODIMP foo::put_Bar( BSTR p)
{
return m_bstrBar.AssignBSTR(p);
}
【问题讨论】:
标签: c++ com atl smart-pointers