如上图所示,在OSG+MFC的配置下,程序能够正常加载场景,但是在关闭窗口时,会弹出上述的异常界面,并且程序光标定位于下图的位置,初步判断是osg::ref_ptr对象析构时存在异常。
关于OSG中osg::ref_ptr对象,有如下说明:
osg对象树是建立在osg::Referenced基类上的,即引用计数,库内绝大部分指针都使用osg::ref_ptr或osg::observer_ptr,在引用计数为0时会自动释放内存,属于有new就要delete的特例(其实只是库帮你做了)。
所以在根据osg项目中的文档,建议osg相关所有指针使用osg::ref_ptr。这时,基本不需要你去维护内存了。比如一个类成员为osg::ref_ptr,那在该类析构时,osg::ref_ptr对象(指保持指针的类)析构,就会自动delete掉指针对应的内存。需要做的只是m_mypointer = nullptr。
所以,如使用到osg::ref_ptr,即使你没有销毁责任,也