函数传递值和自由分配
Function Pass-by-value and free allocation
这里有一个非常基本的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
类不是这样派生的。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 如何在函数中分配的自由记忆
- 我是否必须在C 接口的OPENCV C包装器中自由分配的内存
- C++内存分配/释放和自由空间错误
- 为什么标准允许我在没有析构函数的情况下自由存储分配类
- 用于跨线程分配和自由的良好分配器
- 函数传递值和自由分配
- 将基类指针分配给在自由存储中创建的派生类对象
- 在指针的重新分配的指针上,C++自由崩溃
- 双自由,没有任何动态内存分配