#include <iostream> using namespace std; /************************************************************************/ /* 目的:通过引用计数实现智能指针 */ /************************************************************************/ //计数类 class U_Ptr { friend class Has_Ptr; U_Ptr(int *p) : ip(p), use(1){} ~U_Ptr() { delete ip; } int *ip; size_t use; //次数 }; //智能指针类(通过引用计数来防止悬空指针) class Has_Ptr { public: Has_Ptr(int *p, int val) : ptr(new U_Ptr(p)), value(val){ ptr->use++; } Has_Ptr(const Has_Ptr &other) : ptr(other.ptr), value(other.value){ ptr->use++; } Has_Ptr& operator = (const Has_Ptr& other) { other.ptr->use++; //在减少做操作数的引用计数之前,增加右操作数的引用计数可以防止自身赋值 if (--ptr->use == 0) delete ptr; ptr = other.ptr; value = other.value; return *this; } ~Has_Ptr() { if (--ptr->use == 0) { delete ptr; } } private: U_Ptr *ptr; int value; }; int main() { int *p = new int(23); Has_Ptr p1(p, 45); Has_Ptr p2(p1); delete p; } http://blogold.chinaunix.net/u/18517/showart_241240.html