查看: 813|回复: 2

只能指针

[复制链接]

该用户从未签到

发表于 2015-6-10 08:58:30 | 显示全部楼层 |阅读模式
osg::ref_ptr<osg::Geode> create(){return geode.get()}
跟osg::Geode* create(){return geode.release()}在作用上是一样的么,都能防止内存泄露?谢谢

该用户从未签到

发表于 2015-6-12 15:10:55 | 显示全部楼层
本帖最后由 buaahc 于 2015-6-12 15:21 编辑

osg::ref_ptr<osg::Geode> create(){return geode.get()}//这样能防止内存泄露
osg::Geode* create(){return geode.release()}//这句的意思是解除geode的智能引用,至于能不能自动防止内存泄露,要看你怎么赋值
osg::Geode*gNode = osg::Geode* create(){return geode.release()}//这样不能
osg::ref_ptr<osg::Geode>= osg::Geode* create(){return geode.release()}//这样能

还有一个osg::Geode*gNode = osg::Geode* create(){return geode.get()}//如果这样geode照样会起到自动释放内存的目的,但是gNode 会指向一个无效地址(因为geode在调用析构函数的时候自动释放了指向的内存),
所以在定义返回类型时,千万不要随便乱搭配
有点绕,如果要搞清楚智能指针,你必须去看他的源代码,彻底搞懂到底何时怎么调用的ref()、unref()、unref_nodelete()

该用户从未签到

 楼主| 发表于 2015-6-16 09:41:27 | 显示全部楼层
buaahc 发表于 2015-6-12 15:10
osg::ref_ptr create(){return geode.get()}//这样能防止内存泄露
osg::Geode* create(){return geode.rel ...

多谢,这几天看了下,明白了不少,还是得看代码,使劲钻才行,痛并快乐着吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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