查看: 3141|回复: 1

关于smart指针的用法

[复制链接]

该用户从未签到

发表于 2008-3-7 22:53:10 | 显示全部楼层 |阅读模式
想求教高手。
根据教材上都写的,每个osg对象都应该定义成ref_ptr指针。系统会自动删除各个对象。
但是我定义了一个类,所有的哦osg节点都定义成类成员变量,中间没有显式删除变量,但是在调用此类的析构函数时总是有异常。
不调用析构函数倒是可以正常推出程序。
哪位高手看看smart指针的正确用法,或者有什么turtorial可以借鉴一下。
小弟谢过

该用户从未签到

发表于 2008-3-7 23:57:57 | 显示全部楼层
继承自osg::Referenced的类(事实上这包括所有类型的节点,渲染属性和渲染相关类)允许用户对其使用智能指针,以实现内存的引用计数,从而避免内存泄露和渲染时强行删除对象造成系统崩溃。因此,osg::Referenced派生类的析构函数是不能够显式调用的,换句话说,用户永远不可能直接使用delete node这样的语法来强行析构一个节点,因为其析构函数被设定为protected类型而非public。当内存引用计数到0时,对象析构的过程由OSG系统内部负责完成。
并非每个osg对象都必须使用ref_ptr指针,诸如osg::Matrix之类的对象是不能够使用智能指针的,而场景节点和渲染属性是否要使用智能指针,也完全根据开发者的爱好决定。只要程序结构设计合理,不使用智能指针也完全不会带来什么问题。
有关智能指针的用法,《OSG快速入门指导》一书中介绍得足够详细,您不妨仔细阅读并理解。
我不清楚您所说的“但是在调用此类的析构函数时总是有异常”指的是什么?能否详述一下您遇到的状况,或者提供部分出错代码,大家一起讨论和解决呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表