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

推荐订阅源

T
Tenable Blog
P
Privacy International News Feed
L
LINUX DO - 热门话题
T
Threatpost
Latest news
Latest news
C
Cybersecurity and Infrastructure Security Agency CISA
Cisco Talos Blog
Cisco Talos Blog
Cyberwarzone
Cyberwarzone
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
C
CXSECURITY Database RSS Feed - CXSecurity.com
The Register - Security
The Register - Security
MongoDB | Blog
MongoDB | Blog
NISL@THU
NISL@THU
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
K
Kaspersky official blog
L
Lohrmann on Cybersecurity
V
Vulnerabilities – Threatpost
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
H
Help Net Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cisco Blogs
Security Latest
Security Latest
博客园 - 叶小钗
博客园 - Franky
The Hacker News
The Hacker News
Engineering at Meta
Engineering at Meta
Scott Helme
Scott Helme
S
Securelist
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
A
About on SuperTechFans
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园_首页
B
Blog RSS Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
月光博客
月光博客
有赞技术团队
有赞技术团队
T
The Blog of Author Tim Ferriss
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tor Project blog
A
Arctic Wolf

博客园 - 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)  评论()    收藏  举报