惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
小众软件
小众软件
The Last Watchdog
The Last Watchdog
Latest news
Latest news
P
Palo Alto Networks Blog
C
Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
P
Privacy International News Feed
NISL@THU
NISL@THU
T
Threat Research - Cisco Blogs
T
Threatpost
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
Spread Privacy
Spread Privacy
T
Tor Project blog
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
AWS News Blog
AWS News Blog
S
Securelist
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
Hugging Face - Blog
Hugging Face - Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
CERT Recently Published Vulnerability Notes
V
Visual Studio Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
博客园 - 司徒正美
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
罗磊的独立博客
A
Arctic Wolf
腾讯CDC
WordPress大学
WordPress大学
IT之家
IT之家
Last Week in AI
Last Week in AI
博客园 - 聂微东
P
Proofpoint News Feed
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
Hacker News: Ask HN
Hacker News: Ask HN
Help Net Security
Help Net Security
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
美团技术团队
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog

博客园 - Zero Lee

调用栈(call stack) 关于STL allocator Calculate maximum sum of any subarray set Calcuate power n of x recursively Convert one binary search tree to double-linked list 设计包含min函数的栈 类模板的模板友元函数定义 一道百度的面试题解答 非printf形式的十六进制和二进制打印(雅虎面试题) 一道腾讯面试题 (转)C++中extern “C”含义深层探索 selection algorithm to select nth small elements based on partition 删除与某个字符相邻且相同的字符 产生全排列的方法解析 一组数的全排列和组合程序实现 求一个正整数的平方根程序实现 [转]多线程队列的算法优化 [转载] STL allocator的介绍和一个基于malloc/free的allocator的简单实现 如何将一片内存链接成链表
One simple counted object pointer
Zero Lee · 2010-10-17 · via 博客园 - Zero Lee

1 template <class T>
2  class Pointer
3 {
4 protected:
5 unsigned *ptrCount;
6 T *ptrObject;
7
8 void ptrDetach(void)
9 {
10 if(ptrCount && --(*ptrCount)==0) {
11 delete ptrObject;
12 delete ptrCount;
13 }
14 ptrObject = NULL;
15 ptrCount = NULL;
16 }
17
18 public:
19 explicit Pointer(T* ptr = NULL) : ptrObject(ptr)
20 {
21 ptrCount = new unsigned;
22 *ptrCount = 1;
23 }
24
25 Pointer(const Pointer<T> &ref)
26 {
27 ptrObject = ref.ptrObject;
28 ptrCount = ref.ptrCount;
29 ++(*ptrCount);
30 }
31
32 inline virtual ~Pointer()
33 {ptrDetach();}
34
35
36 Pointer& operator=(const Pointer<T> &ref)
37 {
38 if(this != &ref) {
39 ptrDetach();
40 ptrObject = ref.ptrObject;
41 ptrCount = ref.ptrCount;
42 ++(*ptrCount);
43 }
44 return *this;
45 }
46
47 inline T& operator*() const
48 {return *ptrObject;};
49
50 inline T* getObject() const
51 {return ptrObject;};
52
53 inline T* operator->() const
54 {return ptrObject;};
55
56 inline bool operator!() const
57 {return (*ptrCount == 1);};
58
59 inline int operator++() const
60 {return ++(*ptrCount);};
61
62 int operator--() const
63 {
64 if(*ptrCount == 1) {
65 delete this;
66 return 0;
67 }
68 return --(*ptrCount);
69 }
70 };

posted @ 2010-10-17 15:22  Zero Lee  阅读(233)  评论()    收藏  举报