首页 技术 正文
技术 2022年11月16日
0 收藏 809 点赞 2,937 浏览 1307 个字

首先,要使用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 ref_ptr<Other>& rp) : _ptr(rp._ptr) { if (_ptr) _ptr->ref(); }

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

第五句:~ref_ptr() { if (_ptr) _ptr->unref();  _ptr = 0; }

解析:析构函数,执行时对象的内存计数器值减一;

第六句:ref_ptr& operator = (const ref_ptr& rp){assign(rp);return *this;}和第七句inline ref_ptr& operator = (T* ptr){….}

解析:与第三句和第二句相似,相当于把()变成了=号;

第八句:T* operator->() const { return _ptr; }

解析:返回内置变量的指针_ptr,相当于重载的->符号,用例:osg::ref_ptr<osg::Group> node=new osg::Group;node->addchild(..)

第九句:T& operator*() const { return *_ptr; }

解析:返回自己的引用(解引用);

第十句:T* get() const { return _ptr; }

解析:设置一个成员函数返回内置变量的指针_ptr,用例:node1->addchild(node2.get());

如有错误,欢迎指正!

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,489
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,904
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,490
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,290