初始化COM类,在FinalConstruct与构造函数中初始化有何区别

There   are   advantages   to   performing   initialization   in   FinalConstruct   rather   than   the   constructor   of   your   class:  

      You   cannot   return   a   status   code   from   a   constructor,   but   you   can   return   an   HRESULT   by   means   of   FinalConstruct 's   return   value.   When   objects   of   your   class   are   being   created   using   the   standard   class   factory   provided   by   ATL,   this   return   value   is   propagated   back   to   the   COM   client   allowing   you   to   provide   them   with   detailed   error   information.  

      You   cannot   call   virtual   functions   through   the   virtual   function   mechanism   from   the   constructor   of   a   class.   Calling   a   virtual   function   from   the   constructor   of   a   class   results   in   a   statically   resolved   call   to   the   function   as   it   is   defined   at   that   point   in   the   inheritance   hierarchy.   Calls   to   pure   virtual   functions   result   in   linker   errors.  

      Your   class   is   not   the   most   derived   class   in   the   inheritance   hierarchy   —   it   relies   on   a   derived   class   supplied   by   ATL   to   provide   some   of   its   functionality.   There   is   a   good   chance   that   your   initialization   will   need   to   use   the   features   provided   by   that   class   (this   is   certainly   true   when   objects   of   your   class   need   to   aggregate   other   objects),   but   the   constructor   in   your   class   has   no   way   to   access   those   features.   The   construction   code   for   your   class   is   executed   before   the   most   derived   class   is   fully   constructed.  

However,   FinalConstruct   is   called   immediately   after   the   most   derived   class   is   fully   constructed   allowing   you   to   call   virtual   functions   and   use   the   reference-counting   implementation   provided   by   ATL.  

----From   MSDN



    HRESULT FinalConstruct()
    {
        return S_OK;
    }

    void FinalRelease()
    {
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值