请问高人:如何用C++实现基于接口的引用计数?

spirix 2002-03-13 04:49:39
如下面,
interface IX:public IUnKnown{
virtual void FunX()=0;
};
interface IY:public IUnknown{
virtual void FunY()=0;
};

class Com:public IX,public IY
{
public:
virtual void FunX(){;}
virtual void FunY(){;}
virtual HRESULT QueryInterface(const IID& iid,void **ppv){.....}
virtual ULONG AddRef(){ m_Ref++;return m_Ref;}
virtual ULONG Release(){m_Ref--;if(m_Ref==0) delete this; return 0;}
private:
ULONG m_Ref=0;
};

以上的设计(大多数的c++ Com实现都是如此)是基于对象一级的引用计数,现在我想实现基于接口的引用计数(就是对每个接口都进行引用计数),请问各位高人,如何实现?
...全文
86 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zifzhu 2002-03-13
  • 打赏
  • 举报
回复
《COM本质论》4.8和4.9章有详细描述。
kaden 2002-03-13
  • 打赏
  • 举报
回复
这好像要用到TearOff技术吧?

我觉得这跟COM的原理有冲突
可以这样以AddRef为例:
每个接口再从如下一个类派生
interface IUnknownEx
{
virtual ULONG AddRefEx()=0;
}

interface IX : public IUnknown , public IUnknownEx
{
...
virtual ULONG AddRefEx(){/*实现接口计数*/;}
virtual ULONG AddRef(){return AddRefEx();)
}

interface IY : public IUnknown , public IUnknownEx
{
...
virtual ULONG AddRefEx(){/*实现接口计数*/}
virtual ULONG AddRef(){return AddRefEx();)
}

然后class COM中的AddRef调用AddRefEx,这样会自动调用该接口的AddRef函数
试试吧,

1,660

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧