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