C++类的动态组件化技术(2)
作者:佚名; 更新时间:2014-12-05

  简单C++类组件化的思想如下图所示:

  

C++类的动态组件化技术

  2.2. 集合型C++类的组件化

  集合型C++类的情况有所不同。

  集合型C++类以数组(array)、列表(list)、映射表(map)的形式管理其它C++对象。集合对象和它管理的元素对象都被包装成组件后,集合型ATL对象可能调用一个“Destroy”方法,期望删除某一个元素ATL对象;这一操作的实质却是,集合型C++对象的“Destroy”方法被调用,将元素C++对象删除了,而元素ATL对象却不知道。这一操作的结果导致了元素的ATL对象存在,而其绑定的C++对象却被删除的情况,两者的生命周期出现了不一致。

  为了解决这个问题,我们需要在C++对象被删除时,能将ATL对象同时删除;而在ATL对象的引用计数为0需要删除自身时,也能把C++对象删除。可行的解决方案是:

  l 在C++类中保存一个接口指针,指向绑定在一起的ATL对象;为该接口指针赋值的最佳地点显然是提供绑定机制的Link2CPPObj函数内部,为此,还需要给Link2CPPObj添加一个IUnknown*参数

  l 在C++类的析构函数中,判断该接口指针是否为空,如果不为空,则Release对接口的引用,引发ATL对象自身的析构

  现在,技术方案如下图所示:

  

C++类的动态组件化技术

  2.3. 内部创建的组件和外部创建的组件

  集合型C++类组件化后仍然是集合型ATL组件,它可以创建、删除自己管理的组件。这样,组件的创建就可能有两种情况:

  l 由客户直接创建

核心期刊快速发表
Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com