Hi Su, You shouldn't be called ref_ptr.release() in this context, you should be just setting the ref_ptr<> to null.
ref_ptr::release() is a specialist helper method with does an unref_noDelete on the referenced object - it deliberately doesn't delete the object that it's unrefecing. This functionality is required for functions that use ref_ptr<> locally but then have to pass a C* point of the object. Robert. On Thu, Jul 24, 2008 at 10:45 AM, su hu <[EMAIL PROTECTED]> wrote: > Hi all. > > I need to release loaded model and reload other model. I did as follow: > > > osgViewer::Viewer Viewer; > osg::ref_ptr<osg::Group> root = new osg::Group; > osg::ref_ptr<osg::Group> ModelRoot = new osg::Group; > osg::ref_ptr<osg::Node> loadedModel; > ... > Viewer.setSceneData(root.get() > ); > root->addChild(ModelRoot.get()); > ... > > //in frame loop > ..... > switch(CMD) > { > case LOAD_SCENE: > { > > loadedModel = osgDB::readNodeFile(CMD_SceneFileName); > > if (loadedModel.valid()) > { > ModelRoot->addChild(loadedModel.get()); > } > break; > } > case RELEASE_SCENE: > { > if(ModelRoot.valid()) > { > ModelRoot->removeChildren(0,ModelRoot->getNumChildren()); > } > > loadedModel.release(); > > break; > } > > } > > ... > > The loadedModel is added to ModelRoot and is not added to any other group. > > Models could be loaded and "released". But I found used memory was not > reduced at all after "RELEASE_SCENE" was executed. After loading and > releasing several times, used memory is more than 1GB and program is > freezed. I want to know the reason and how to improve it. > > Much appreciation to any reply. > > > Regards, > > Su Hu > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org