请问COM内存管理和一些资源释放的有关问题

请教COM内存管理和一些资源释放的问题
最近在写一个ie插件(vc),每次运行ie,做相应的操作,所用内存总是一截截的慢慢增加。回想自己写的东西,几乎没有有意识的进行内存管理,大多数代码都是东拼西凑起来的。在这里请教各位一些问题:
1,COM中申请内存,有时候能用new操作符,有时候必须用CoTaskMemAlloc,请问COM中到底应该如何申请动态内存。
2,对IE插件(我的是BHO)来说,同一个类的各个对象好像不是独立的,它们貌似共享了普通的数据成员,这就对写构析函数造成了困难。我现在是什么都不敢干。请问这样的类写构析函数需要注意什么呢?
3,一个很具体的问题。我申请了一个动态空间(函数域内),但是在函数结束之前我没有办法释放它(比如说它成为了某个menu的item   data的一个变量),我一般的做法是记住这个名字,然后在可以释放的时候释放它。但是,当我需要循环创建的时候问题来了,N多的名字需要记住。我知道我这种做法比较傻,所以请问有没有什么好点的方法?
4,一个很具体的问题。已经知道一个菜单资源的句柄,如何释放它。

------解决方案--------------------
讲得太复杂了,反倒迷失了本意。

首先你要记住,你分配的内存很可能另一个COM对象不想让你释放,它觉得这个内存有用,它想留着用。COM是二进制规范,也就是说,和语言无关。你的程序和一个COM对象沟通,这个COM对象不一定是C++写的,可能是vb,甚至Jscript。如果你new了一个对象,请问对方怎么帮你释放?

但是你用IMalloc/CoTaskMemAlloc 这就好了,你是向COM库申请内存,这样申请的内存,别人就可以通过一致的IMalloc/Co.....方法来让COM库释放,等于多了个中间人,双方委托它后,各忙各的,不需要你操心。