在CRichEditCtrl上使用表情符号时内存泄漏

Jor*_*rge 7 c c++ windows mfc

我正在开发一个基于CRichEditCtrl(MFC)的文本编辑器类(用于聊天应用程序),支持表情符号.

加载表情符号的位图后,我使用该函数OleCreateStaticFromData将其插入 CRichEditCtrl.之后我只删除自己分配的位图对象.我可以验证(使用GDIView实用程序)我分配的所有资源都已正确发布.

这非常有效:位图(表情符号)在CRichEditCtrl窗口上绘制,处理就像一个字符.

我的问题是我不知道如何释放分配的内存(内部)OleCreateStaticFromData来管理位图(表情符号).即使我删除了CRichEditCtrl对象,也不会释放为所使用的任何表情符号分配的内存.我想知道如何解决这个问题.这是MFC的问题还是我做错了什么?

Mar*_*som 2

OleCreateStaticFromData返回传递给 Rich Edit 控件的 COM 指针。该 COM 指针已AddRef应用到它,因此您必须Release在将其传递给控件后调用它,以表示您不再直接访问它。该控件在被销毁时也会执行 a 操作Release,这将导致 COM 对象被删除。

您还可以将返回的指针存储在智能指针类中_com_ptr_t,或者CComPtr它会Release自动存储。