这里有一个非常基本的C++问题,只是想在我犯错之前确定一下。
我有一个结构obj
,如下所示:
struct obj
{
BSTR str;
}
在函数foo
中,我初始化了一个cComObject<obj> ex
,并将内存分配给str。
然后,在函数foo
中,我调用了函数bar(ex)
(使用变量ex
)。
在这种情况下,是否需要释放函数bar
中的ex.str
以避免堆泄漏?
感谢
嗯,有人必须释放BSTR
以避免内存泄漏。它可以是bar
,也可以是在bar
返回之后的foo
。BSTR
只是一个指针,是wchar_t*
的typedef。
请注意,通常不会按值传递CComObject
的实例。CComObject
是指通过AddRef
和Release
在堆上分配,并使用引用计数管理其生存期。此外,CComObject<C>
期望从CComObjectRoot
导出C
。您的obj
类不是这样派生的。