关于WIN32 api的简单问题 我有一个使用MySQL C API连接到MySQL的函数,它检索指向结构的指针的链接列表。
因此,在对话框回调中,我通过这些元素填充ListView
控件,并将每个元素结构指针附加到ListView
中的行。
问题是:我应该在ListView
移除LVM_DELETEALLITEMS
之后的所有项目时释放指针,例如当我点击刷新按钮时?
或者WIN32 API是否可以为我释放它们?
答案 0 :(得分:5)
从列表视图中删除项目时,您负责清理通过LVITEM结构的 lParam 成员引用的所有资源。 Windows API不会为您执行此操作。
实际上,Windows API无法为您执行此操作。它无法知道指针是否指向使用new
,malloc
,IMalloc
或任何其他分配器分配的内存。或者指针可能指向静态分配的数组,并且不需要完全释放。或者它甚至可能不是指针,而是用于排序的哈希值,或者是其他结构的索引。
由于只有您知道,如何解释 lParam ,所有与资源管理相关的责任都在您身上。与some opinions相反,C ++在这里不会帮助你。