OSG中osg::ref_ptr对象析构异常的问题及解决方法

在OSG+MFC环境中,程序关闭时遇到osg::ref_ptr对象析构异常。osg对象基于引用计数,当计数为0时自动释放。为避免异常,需要在析构时将osg::ref_ptr对象设为nullptr。通过在析构函数中添加mViewer = nullptr解决了问题。
摘要由CSDN通过智能技术生成

如上图所示,在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,即使你没有销毁责任,也

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值