WINAPI会自动释放附加到控件的内存吗?
问题描述:
只是一个关于WIN32 API的简单问题。
我有一个使用MySQL C API连接到MySQL的函数,它检索指向结构体的链接列表。WINAPI会自动释放附加到控件的内存吗?
所以在对话框回调中,我用这些元素填充了ListView
控件,并将每个元素结构指针附加到ListView
中的一行。
问题是:我是否应该在从ListView
除以LVM_DELETEALLITEMS
之后释放指针,例如当我单击刷新按钮时?
或者WIN32 API为我释放它们吗?
答
当删除从列表视图中的项目,你是负责清理,可通过LVITEM结构的lParam的成员引用的任何资源。 Windows API不会为你做这个。
事实上,Windows API无法为你做到这一点。它无法知道,指针是否指向使用new
,malloc
,IMalloc
或任何其他分配器分配的内存。或者,也许指针指向一个静态分配的数组,并且不需要完全释放。或者它甚至可能不是一个指针,而是一个用于排序的散列值,或者是一个其他结构的索引。
因为只有你知道,所以如何解释所有关于资源管理的责任都在你身上。与some opinions相反,C++在这里不会帮你。
使用WinAPI调用,您负责清理附加到控件的资源。 – t0mm13b
感谢这是如此精确和清晰 –
想要确认你是否真的在C而不是C++中这样做?这很难。在C语言中,你必须更加细致地进行内存管理。 –