查看: 1093|回复: 4

一个节点没有父节点了,一直不析构是怎么回事?

[复制链接]

该用户从未签到

发表于 2012-11-29 11:26:23 | 显示全部楼层 |阅读模式
测试在一般情况下:

osg::Group* G1 = new osg::Group;
osg::Group* G2 = new osg::Group;
osg::Group* g = new osg::Group;
osg::Node* n = new osg::Node;
G1->addChild( g );
G2->addChild( g );
g->addChild( n );

int pCnt = g->getNumParents();
for( int i = 0; i < pCnt; i++ )
{
      g->getParent(0)->removeChild( g );
}

上述代码执行完之后,g就被析构了,通过调试发现,g指针已经不能使用了,其父节点个数为0,孩子节点个数为0(虽然没有使用g->removeChild)。

我现在遇到了一个g节点,经过上述代码之后,g指针居然还能用,g肯定是没被析构。但是他的父节点个数已经为0,孩子节点保持原先状态。这到底是怎么回事啊?给位大侠

该用户从未签到

发表于 2012-11-29 15:51:53 | 显示全部楼层
只能说您这个g还被别的节点所引用

该用户从未签到

 楼主| 发表于 2012-11-29 17:05:55 | 显示全部楼层
array 发表于 2012-11-29 15:51
只能说您这个g还被别的节点所引用

我也认为g在别的地方被“引用”,我想不明白的是:g除了做别的节点的孩子之外(被一个组节点当做孩子,但此时g的父节点个数不应该为0啊),还有别的“引用”方式吗?

该用户从未签到

发表于 2012-11-29 20:07:45 | 显示全部楼层
wanggang8826 发表于 2012-11-29 17:05
我也认为g在别的地方被“引用”,我想不明白的是:g除了做别的节点的孩子之外(被一个组节点当做孩子,但 ...

只要有指向g的智能指针没有置为空,g就一直不会析构。

该用户从未签到

 楼主| 发表于 2012-11-30 12:44:55 | 显示全部楼层
smash 发表于 2012-11-29 20:07
只要有指向g的智能指针没有置为空,g就一直不会析构。

嗯,我发现了在程序的其他地方,我把一个节点node和Qt中的QTreeItem绑定在一起了,并且还为node添加了一个回调。然后我把Qt那棵树禁止掉了,就好了。花了两天的时间,算是没白浪费。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表