功能按值传递和免费分配

时间:2013-07-26 22:38:55

标签: c++ com smart-pointers

这是一个非常基本的C ++问题,只是想在我犯错误之前确定。

我有一个结构obj,如下所示:

struct obj
{
  BSTR str;
}

在函数foo中,我初始化了一个cComObject<obj> ex,并将内存分配给str。
然后,在函数foo中,我调用了函数bar(ex)(变量ex)。

在这种情况下,我是否需要在函数ex.str中释放bar以避免堆泄漏?

由于

1 个答案:

答案 0 :(得分:1)

好吧,某人必须释放BSTR以避免内存泄漏。它可以是bar,也可以在foo返回后barBSTR只是一个指针,是wchar_t*的typedef。

请注意,您通常不会按值传递CComObject的实例。 CComObject旨在通过AddRefRelease在堆上进行分配,并使用引用计数来管理其生命周期。此外,CComObject<C>期望C来自CComObjectRoot。你的obj课程并非如此派生。