第十三章——复制控制 智能指针的code实现
来源:互联网 发布:网络虚拟号发短信软件 编辑:程序博客网 时间:2024/05/01 09:23
#include <iostream>
#include <conio.h>
using namespace std;
class U_Ptr //定义一个智能指针
{
friend class HasPtr;
int *ip;
size_t used;//使用记数
U_Ptr(int *p): ip(p),used(1)
{ }
~U_Ptr()
{
delete ip;
}
};
class HasPtr
{
public:
HasPtr(int *p,int i) : ptr(new U_Ptr(p)),val(i)
{ }
HasPtr(const HasPtr& obj) : ptr(obj.ptr) , val(obj.val) // 复制构造函数
{
++ ptr->used; // 复制一次,引用计数加一
}
HasPtr& operator=(const HasPtr& rhs)
{
++rhs.ptr->used;
if(--ptr->used == 0)
delete ptr->ip;
ptr = rhs.ptr;
val = rhs.val;
return *this;
}
~HasPtr()
{
if(--ptr->used == 0)
delete ptr->ip;
}
private:
U_Ptr *ptr;
int val;
public:
int * get_ptr() const
{
return ptr->ip;
}
int get_int() const
{
return val;
}
void set_ptr(int *p)
{
ptr->ip = p;//虽然指针所指不同了,但是这是大家都想改变的,依然很多兄弟在看着这个指针哦
}
void set_int(int i)
{
val = i;
}
int get_ptr_val()
{
return *ptr->ip;
}
void set_ptr_val(int i)
{
*ptr->ip = i;
}
int get_used_num() const
{
return ptr->used;
}
};
void Tmp(HasPtr &test,HasPtr &test2,HasPtr &test3)
{
HasPtr test4 = test;
cout<<"Tmp 1"<<endl;
cout<<test.get_ptr_val()<<" "<<test.get_used_num()<<endl;
cout<<test2.get_ptr_val()<<" "<<test2.get_used_num()<<endl;
cout<<test3.get_ptr_val()<<" "<<test3.get_used_num()<<endl;
cout<<test4.get_ptr_val()<<" "<<test4.get_used_num()<<endl;
}
int main()
{
int *p = new int(55) , i=100;
HasPtr test(p,i);
cout<<"the 1"<<endl;
cout<<test.get_ptr_val()<<" "<<test.get_used_num()<<endl;
HasPtr test2(test);
cout<<"copy 1"<<endl;
cout<<test.get_ptr_val()<<" "<<test.get_used_num()<<endl;
cout<<test2.get_ptr_val()<<" "<<test2.get_used_num()<<endl;
HasPtr test3 = test;
cout<<"= 1"<<endl;
cout<<test.get_ptr_val()<<" "<<test.get_used_num()<<endl;
cout<<test2.get_ptr_val()<<" "<<test2.get_used_num()<<endl;
cout<<test3.get_ptr_val()<<" "<<test3.get_used_num()<<endl;
Tmp(test,test2,test3);
cout<<"Tmp out 1"<<endl;
cout<<test.get_ptr_val()<<" "<<test.get_used_num()<<endl;
cout<<test2.get_ptr_val()<<" "<<test2.get_used_num()<<endl;
cout<<test3.get_ptr_val()<<" "<<test3.get_used_num()<<endl;
getch();
return 0;
}
//the 1
//55 1
//copy 1
//55 2
//55 2
//= 1
//55 3
//55 3
//55 3
//Tmp 1
//55 4
//55 4
//55 4
//55 4
//Tmp out 1
//55 3
//55 3
// 55 3
- 第十三章——复制控制 智能指针的code实现
- 第十三章(复制控制) 智能指针(使用计数)、定义值型类
- C++智能指针,实现Mat类的复制控制
- c++ 复制控制和智能指针实现
- 复制控制+智能指针
- 第十三章 复制控制
- 第十三章:复制控制
- 第十三章 复制控制
- 第十三章 复制控制
- primer 复制控制 智能指针
- C++ 复制控制 & 智能指针
- 智能指针——类指针成员的复制
- C++ primer 4 第十三章 复制控制
- c++ primer读书笔记-第十三章 复制控制
- 智能指针的实现
- 智能指针的实现
- 智能指针的实现
- 智能指针的实现
- 头脑风暴会的10项原则
- 关于的无限级联(省|市|县|乡|村|...)
- 上下文context, 上下文菜单解释
- RFC中文手册
- msdn上关于菜单、快捷菜单、状态栏和工具栏的解释
- 第十三章——复制控制 智能指针的code实现
- 关于POS的各种外设处理(包括打印机、钱箱等)(PB)
- 我最近自己读过、想读、在读图书
- Hibernate编写通用数据库操作代码
- 关于上下文System.Web.HttpContext
- 什么是MIME类型
- 沟通中,怎样成为说话高手?
- 关于在Frame中Session丢失的一种解释?
- POS小票打印