OSG中osg::ref_ptf类的巧妙设计

OSG::ref_ptr在Node中的三种使用方法

方法一,最好的方法,十分安全,也是OSG中最常用的方法

osg::ref_ptr<osg::Node> aNode(new osg::Node());

group->addChild(aNode.get());

方法二,也是非常好的方法,有时候不适用,但也是十分安全。

group->addChild(new osg::Node());

方法三,很危险

osg::Node* anotherNode = new osg::Node();

group->addChild(anotherNode);

方法一:在new osg::Node()时创建了一个Node的资源,这时在堆内引用Node的计算器会被置1. 在group->addChild(aNode.get())时又引用了一次,会再加1。在这两次引用都结束时,Node的资源就会被释放。

方法二:这个方法也是很实用的,但是无法引出Node的指针,该指针也许在别处需要使用,事实上这种情况经常发生。可以使用NodeVisitor来得到Node的指针,也可以使用find Child方法来得到Node的指针。

方法三:这个应该是最常用,最不好的方法,原因在于如果在osg::Node* anthernode = new osg::Node();之后程序发生了错误,抛出了异常,那么Node所占用的资源无法释放掉。尤其是程序异常被捕获后,程序继续正常运行,此时内存状态处在不正常状态下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值