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所占用的资源无法释放掉。尤其是程序异常被捕获后,程序继续正常运行,此时内存状态处在不正常状态下。