C++智能指针

来源:互联网 发布:girl.cn 域名 价格 编辑:程序博客网 时间:2024/05/24 16:13

每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数;调用析构函数时,析构函数减少引用计数(如果引用计数减至0,则删除基础对象)。

#include <iostream>

#include <stdio.h>
#include <new>
using namespace std;

class U_Ptr
{
private:
char *p;
size_t count;
public:
U_Ptr(char *ptr,int val=1):count(val)
{
p=(char *)malloc(strlen(ptr)+1);
strcpy(p,ptr);
}
friend class HasPtr;
~U_Ptr()
{
delete p;
}
char &operator*()
{
return *p;
}
};
class HasPtr
{
public:
HasPtr(char *p):ptr(new U_Ptr(p))
{


}
HasPtr(const HasPtr& orig):ptr(orig.ptr)
{
++ptr->count;
}
HasPtr &operator=(const HasPtr&);
~HasPtr()
{
if (--ptr->count == 0)
{
ptr->~U_Ptr();
}
}


U_Ptr &operator *()
{
return *ptr;
}
U_Ptr* operator &()
{
return ptr;
}
private:
U_Ptr *ptr;
};

void main()
{
char *a ="hdsjhafjk";
HasPtr p(a);
HasPtr b(p);
printf("%s\n",*p);

}



这个是我写的一个职能指针的简单例子,应用的是简单的引用计数法!在网上看了一点资料,但是把别人的代码敲出来总是有点问题,所以就自己写了一个简单例子!希望能给有用的朋友提供一点帮助!

0 0
原创粉丝点击