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

时间:2010-05-31 22:27:20

标签: c++ c windows mfc

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

您也可以将返回的指针存储在智能指针类_com_ptr_tCComPtr中,并自动{{1}}。