博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gac代码库分析(3)智能指针
阅读量:6723 次
发布时间:2019-06-25

本文共 2960 字,大约阅读时间需要 9 分钟。

 

主要在于引用计数的使用

代码示例:

template
class Ptr{ template
friend class Ptr;protected: vint* counter; T* reference; void Inc() { if(counter) { (*counter)++; } } void Dec() { if(counter) { if(--(*counter)==0) { delete counter; delete reference; counter=0; reference=0; } } } vint* Counter()const { return counter; } Ptr(vint* _counter, T* _reference) :counter(_counter) ,reference(_reference) { Inc(); }public: Ptr() { counter=0; reference=0; } Ptr(T* pointer) { if(pointer) { counter=new vint(1); reference=pointer; } else { counter=0; reference=0; } } Ptr(const Ptr
& pointer) { counter=pointer.counter; reference=pointer.reference; Inc(); } template
Ptr(const Ptr
& pointer) { T* converted=pointer.Obj(); if(converted) { counter=pointer.Counter(); reference=converted; Inc(); } else { counter=0; reference=0; } } ~Ptr() { Dec(); } template
Ptr
Cast()const { C* converted=dynamic_cast
(reference); return Ptr
((converted?counter:0), converted); } Ptr
& operator=(T* pointer) { Dec(); if(pointer) { counter=new vint(1); reference=pointer; } else { counter=0; reference=0; } return *this; } Ptr
& operator=(const Ptr
& pointer) { if(this!=&pointer) { Dec(); counter=pointer.counter; reference=pointer.reference; Inc(); } return *this; } template
Ptr
& operator=(const Ptr
& pointer) { T* converted=pointer.Obj(); Dec(); if(converted) { counter=pointer.Counter(); reference=converted; Inc(); } else { counter=0; reference=0; } return *this; } bool operator==(const T* pointer)const { return reference==pointer; } bool operator!=(const T* pointer)const { return reference!=pointer; } bool operator>(const T* pointer)const { return reference>pointer; } bool operator>=(const T* pointer)const { return reference>=pointer; } bool operator<(const T* pointer)const { return reference
& pointer)const { return reference==pointer.reference; } bool operator!=(const Ptr
& pointer)const { return reference!=pointer.reference; } bool operator>(const Ptr
& pointer)const { return reference>pointer.reference; } bool operator>=(const Ptr
& pointer)const { return reference>=pointer.reference; } bool operator<(const Ptr
& pointer)const { return reference
& pointer)const { return reference<=pointer.reference; } operator bool()const { return reference!=0; } T* Obj()const { return reference; } T* operator->()const { return reference; }};

1

转载地址:http://wrcmo.baihongyu.com/

你可能感兴趣的文章
ACM-ICPC (10/11)
查看>>
24.层模型--相对定位
查看>>
css 基础知识
查看>>
LeetCode 387. First Unique Character in a String
查看>>
非常好的博客!!!linux内存管理概述【转】
查看>>
ibevent 和 libev 提高网络应用性能【转】
查看>>
linux 串口0x03,0x13的问题【转】
查看>>
TypedValue.applyDimension的使用
查看>>
LeetCode OJ:Add and Search Word - Data structure design(增加以及搜索单词)
查看>>
关于js类中闭包调用this问题
查看>>
Storm程序的并发机制(重点掌握)
查看>>
Eclipse 改变字体大小,设置背景色
查看>>
c# 窗体滑动显示
查看>>
讲解ping中的TTL是什么意思
查看>>
Data manipulation in python (module 5)
查看>>
UWP 禁止Pivot swip 手势
查看>>
赋予管理员操作系统文件的权限
查看>>
java对象数组的概述和使用
查看>>
time时间处理
查看>>
PowerDesigner导入SQL生成数据模型
查看>>