多继承引发的诡异bug (cocos2d-x CCObject)

我有一个Singleton,用于处理下载信息,用到了HttpClient,那么就必须继承自CCObject,然后添加一个对应的函数指针来响应回调。由于同时还需要响应下载模块的信息回调,所以又继承自IDownloadEvent接口。

      结果引发了一个非常难查的内存Bug。当回调函数调用后,这个Singleton的所有数据都被篡改了,导致函数内各种崩溃。但是我检查了Singleton的地址,又确实没有被改变,同时看了HttpRequest里面保存的target对象(就是我这个Singleton),它的数据又是正确的(地址跟我的Singleton一样,证明确实是一个对象)。

      既然是同一个对象,地址又一样,为什么监视器中显示的变量数据完全不一样呢?

      我猜想是由于多继承引发的问题。现在只保留一个对CCObject的继承,然后就解决了问题。

     直到现在我还没有查明究竟是什么原因导致这个诡异的bug。但是可以明确多继承确实可能造成一些问题,是应该避免的。同时也说明使用继承的方式来完成监听者模式,在c++中不是一个很好的选择。即便继承的是只有纯虚函数的方法类,但是继承终究是继承,这个与java在语法层面实现接口的概念是不同的。

      总结,尽量避免多继承,使用委托的方式完成信息回调而不是继承的方式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值