基类虚析构函数。

在调程序是发现下面代码在release的时候crash

interface ITest2:public  IUnknown
{
    virtual void bb()=0;
};

class CTest1Imp:public ITest
{
    virtual void aa(){};
};

class CAAA:public CTest1Imp, public ITest2,private CIUnknownImp
{
public:

    virtual void bb(){};

    CODE_IUNKNOW_IMP
};


        CAAA *pa = new CAAA;
        pa->Release();//调这句会crash

后来修改CAAA的继承顺序,把CIUnknownImp放在最前就不会crash,
继承顺序不一样会有这么大的后果?。
继续跑程序发现,程序有内存泄漏。CAAA的析构居然不会被调到。

后来才发现是CIUnknownImp里面的析构函数没写,缺省不是virtual导致的。
加上之后一切OK。

################################

CComPtr使用。

下面的调法是没用的(GetCurObj()已经做了AddRef)

CComPtr pCurObj = g_pPage->GetCurObj();

这里的初始化直接调了pCurObj的赋值构造函数,里面又做了次AddRef().

需要修改成
CComPtr pCurObj ;

*(&pCurObj) = g_pPage->GetCurObj();

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值