Secret Garden
zpp71
全部博文(28)
spoken(0)
listening(0)
slackware(1)
DOS(2)
Ubuntu(1)
AIX(0)
Solaris(0)
BSD(0)
Linux(5)
我的家乡(1)
旅游天下(0)
游戏世界(0)
影音文字(0)
运动地带(0)
snort(0)
Cisco技术(0)
Informix(0)
DB2(0)
Oracle(1)
Sybase(0)
PostgreSQL(0)
MySQL(2)
Ice(0)
boost(1)
Zope(0)
D语言(0)
Ruby(0)
中间件技术(0)
软件工程(1)
Python(6)
Perl(0)
Php(0)
Java(0)
Shell(1)
c/c++(3)
2011年(3)
2009年(9)
2008年(16)
浪花小雨
gary7214
dajunx
yanbingw
zzz607
lincolnr
分类: C/C++
2009-07-07 21:20:46
简单的实现了下智能指针:
#include <iostream>using namespace std;template <class T>class smart_ptr{ private: T *ptr; int *count; void free() { if (--(*count) == 0) { delete ptr; } } public: smart_ptr(T *p) : ptr(p), count(new int(1)){} smart_ptr(const smart_ptr &sp) : ptr(sp.ptr), count(sp.count) { ++(*count); } smart_ptr& operator=(const smart_ptr &sp) { free(); count = sp.count; ptr = sp.ptr; ++(*count); } T* operator->() { if (*count == 0) return NULL; return ptr; } T& operator*() { if (*count == 0) { throw exception(); } return *ptr; } ~smart_ptr() { free(); }};struct A{ void f() { cout << "In A::f()" << endl; }};void test(){ smart_ptr<int> sptr1(new int(5)); smart_ptr<int> sptr2(sptr1); cout << "*sptr1=" << *sptr1 << ",sptr2=" << *sptr2 << endl; smart_ptr<int> sptr3(new int(7)); sptr2 = sptr3; cout << "*sptr1=" << *sptr1 << ",sptr2=" << *sptr2 << ",sptr3=" << *sptr3 << endl; smart_ptr<A> sptr4(new A()); sptr4->f(); (*sptr4).f();}int main(int argc, char *argv[]){ test(); return 0;}
上一篇:strace 命令是一种强大的工具
下一篇:博客已升级,请注意变更地址
登录 注册