OSG是使用C++语言开发的,而该语言在动态内存管理方面做得并不好,经常需要程序员手动申请和释放内存。这种靠人工管理内存的方式不仅繁琐,而且极易造成内存泄漏,尤其在一个中大型系统中,靠人工管理内存是一项艰巨的任务。
如何解决这类问题???
数据类型osg::ref_ptr(智能指针)在源码中随处可见,它和另外一种数据类型osg::observer_ptr(观察指针)为我们提供了非常良好的动态对象使用体验。
智能指针的用法
osg::Node* pNode = new osg::Node();
osg::ref_ptr< osg::Node>rpNode=pNode;
if(rpNode.valid())
{
rpNode-> ...
}
通过osg::Node实例化一个智能指针模板对象rpNode,该对象可以直接保存一个使用new关键字动态创建的osg::Node对象,并可通过valid() 方法判断内部对象是否有效。
使用->操作符直接对内部对象进行调用,这里无需关心osg::Node对象的释放,因为在智能指针对象rpNode析构时会自动检查是否需要删除对象,如果需要则直接删除。
观察指针的用法
osg::Node* pNode = new osg::Node();
osg::observer_ptr< osg::Node>opNode=pNode;
if(opNode.valid())
{
opNode-> ...
}
osg::observer_ptr与osg::ref_ptr的用法基本相同