osg的ref_ptr和observer_ptr

本文介绍了osg中的ref_ptr和observer_ptr,它们分别是强指针和弱指针的实现,用于自动内存管理。ref_ptr通过引用计数增加与减少控制对象生命周期,而observer_ptr使用观察者模式,不干涉对象的创建与销毁。尽管ref_ptr能帮助避免某些内存问题,但使用release函数可能导致内存泄漏,需谨慎处理。
摘要由CSDN通过智能技术生成

ref_ptr就是所谓的强指针类型

observer_ptr是所谓的弱指针类型

需要注意的是他们都是类,而不是指针,只不过他们用于管理指针。

1.如何实现自动内存管理

所谓自动内存管理就是只管对象或指针的创建和使用而不管销毁。

实现自动内存管理指的是ref_ptr,他工作的机理就是每当多引用一次对象(比如addChild)其引用计数就会增加1,多删除一次对象(removeChild)其引用计数就会减1,如果引用计数为0,则销毁对象。

另外定义其对象实例会有生命周期,在对象实例超出生命周期进行销毁时会自动释放所管理的指针,因而实现内存管理,如下代码:

class AAA:public osg::Referenced{

};

int
main(int argc, char** argv)
{
    {
        osg::ref_ptr<AAA> hhh=new AAA();//超出其生命周期时会自动释放AAA指针,从而实现内存管理
    }
    
}

以下使用ref_ptr的方式不推荐使用(虽然也能进行内存管理,不会出现内存泄漏),容易出现不可预期的问题(指针所指向内存已经删除,但是指针并未置NULL,导致再次使用指针时出现不可预期问题)

class AAA:public osg::Referenced{

};

int
main(int argc, char** argv)
{
    AAA* tt=new AAA;
    {
        osg::ref_ptr<AAA> st
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值