用引用计数经常遇到继承的钻石结构

用引用计数经常遇到继承的钻石结构,即类A继承于Ref(或Ref子类),B继承于Ref(或Ref子类),C继承于A和B,然后调用autorelease就编译出错了(autorelease不明确),怎么办?

真不知道引用计数有什么好,又不是Objective-C,其他子类在继承Ref时又不用虚继承,很容易出现钻石结构,不是说C++化吗,什么时候去掉啊~~~~

你的程序是多复杂要用到菱形继承:10::10:

我写的是一个简单的碰撞系统(因为是简单圆的碰撞,就没用box2d),这个系统是一个独立的系统,按照理解不针对渲染节点,所以刚开始没依赖cocos2d的任何东西,包括容器都是用STL的vector,但是碰撞时,当我从parent移除node时,就直接给我删除了(因为release),于是我想在碰撞系统中持有该对象,所以我把容器改成了cocos2dx的Vector,碰撞元素类改成了Ref类型,但是继承的时候必须同时继承Node和碰撞元素类,钻石结构就产生了。我后来让碰撞元素类继承于Node类,这个问题就解决了,当然我又改动了牵连的其他代码才成功的。虽然问题解决了,但回头想想,碰撞元素类背了Node这么个大包袱,并且碰撞系统中完全没有用到Node的任何东西,仅仅是基类Ref中的引用计数,这样的依赖显得非常冗余,耦合度过高,不利于复用(如果以后的项目需要用到,而且必须继承于其他同事已经写好的一个Node子类,就非常头痛了)。请版主指点一二。

你在STL的vector中添加的时候retain一下,移除的时候再release行不行呢?

— Begin quote from ____

引用第1楼insul于2014-11-04 17:37发表的 :
你的程序是多复杂要用到菱形继承:10::10: http://www.cocoachina.com/bbs/job.php?action=topost&tid=237838&pid=1090379

— End quote

:11:

用组合不要用继承