OSG下的引用计数指针(Reference Pointers)的理解

使用OpenSceneGraph会经常见到这样的代码
 osg::ref_ptr<osg::Node> nodeRptr = new osg::Node;
osg::ref_ptr即为Reference counted objects 每次使用时自动递增,用完后自动递减,当最后一个 计数器变为0,对象自动销毁。
ref_ptr模板类型继承自Referenced类,Referenced类有三个基本函数:
  1. void ref()增加引用计数
  2. void unref()减少引用计数
  3. int getReferenceCount()返回引用数

而通过ref_ptr类,当需要时(执行复制构造函数或赋值操作),引用计数自动增加,不需要时(析构函数)则自动减少。


我们来实际对比一下 :

void SomeClass::someMethod() { 
osg::ref_ptr<osg::Node> nodeRefPtr = new osg::Node; 
osg::Node *nodePtr = new osg::Node; 
}
 nodeRefPtr nodePtr 都通过new被分配在堆上,函数返回时都变量超出作用域

区别在于nodeRefPtr在初始被赋值时,引用计数增加,超出作用域,析构函数被调用,引用计数减为0,对象自我删除,内存清理完毕。而nodePtr超出作用域后,发生内存泄露。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值