使用OSG的人都知道OSG的内存管理方式采用了智能指针,通过智能指针的方式让OSG自己处理对象的销毁工作。在OSG中有两个智能指针类型,一个就是我们再熟悉不过的ref_ptr,另外一个可能很多人不一定经常用,但确实非常好的observer_ptr。这两种类型都是作为智能指针而出现的,那他们到底有什么区别?为什么会出现两个类似的东西?下面我们慢慢揭开它们的面纱。
其实它们是两种智能指针类型,一种是我们熟悉的强指针类型(strong pointer),一种是弱指针类型(weak pointer),ref_ptr就是强指针类型,observer_ptr是弱指针类型,强指针类型ref_ptr和一般意义的智能指针类型相同,通过引用计数来记录有多少对象在使用该对象,当没有任何对象使用该对象时该对象自动销毁,而observer_ptr也指向一个对象,但它没有引用计数功能,它仅仅记录该对象的地址,当该对象在其它地方被销毁后,通过observer_ptr获得的对象地址将为空。为什么称之为弱指针,本人不知道这个概念的提出者是如何想的,个人感觉可能就是因为它仅仅是对对象地址的一个记录,不参与对象的生存期管理,所以称之为弱。不知道您是否这样认为,反正我这样认为了,哈哈。
说到这里我们应该会有疑问,为什么还要多个弱智能指针呢?这不成了多个弱智吗?一个ref_ptr不就够了吗?我说说我的看法,不知道是不是准确,仅仅代表个人的观点,如果我们只用ref_ptr,那就意味着在任何情况下只要我们需要引用某个对象,就要增加它的引用计数,不用了就减少引用计数,我们要明确的第一个问题就是,
不可不表的OSG智能指针之强指针与弱指针
最新推荐文章于 2024-04-08 17:45:41 发布