详解osg::ref_ptr

  • Post author:
  • Post category:其他


首先,要使用ref_ptr的类必须继承自Referenced类(当然Referenced本身肯定也可以),这样才能使用->ref()和unref(),才能正确,ref_ptr其实本身是一个类,后面的是它的对象,但是它重载了->符号,使得它的对象表现得像一个指针的特性一样,所以叫智能指针,这里实现的方法为引用计数。

然后让我们进入ref_ptr的内部:

第一句:ref_ptr() : _ptr(0) {}

解析:构造函数,把内置变量_ptr置0,用例一般为:osg::ref_ptr<osg::Node> node;这样就用到了这个构造函数

第二句:ref_ptr(T* ptr) : _ptr(ptr) { if (_ptr) _ptr->ref(); }

解析:重载的构造函数,新申请一个T*的指针赋值给_ptr,_ref()表示为内存的计时器+1,用例一般为:osg::ref_ptr<osg::Node> node(new osg::Node);

第三句:ref_ptr(const ref_ptr& rp) : _ptr(rp._ptr) { if (_ptr) _ptr->ref(); }

解析:拷贝构造函数,其对象将指向一个已有的智能指针对象,同时对象的内存计数器值加一,用例一般为:osg::ref_ptr<osg::Node> node1(new osg::Node);osg::ref_ptr<osg::Node> node2(node1);

第四句: template<class Other> ref_ptr(const