函数传递值和自由分配

Function Pass-by-value and free allocation

本文关键字:自由 分配 函数      更新时间:2023-10-16

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

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

struct obj
{
  BSTR str;
}

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

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

感谢

嗯,有人必须释放BSTR以避免内存泄漏。它可以是bar,也可以是在bar返回之后的fooBSTR只是一个指针,是wchar_t*的typedef。

请注意,通常不会按值传递CComObject的实例。CComObject是指通过AddRefRelease在堆上分配,并使用引用计数管理其生存期。此外,CComObject<C>期望从CComObjectRoot导出C。您的obj类不是这样派生的。