标签:
#include <iostream>
#include<string>
#include<set>
using namespace std;
//定义值类型
/*
复制构造函数不再复制指针,它将分配一个新的 int 对象,并初始化该对
象以保存与被复制对象相同的值。每个对象都保存属于自己的 int 值的不同副
本。因为每个对象保存自己的副本,所以析构函数将无条件删除指针。
赋值操作符不需要分配新对象,它只是必须记得给其指针所指向的对象赋新
值,而不是给指针本身赋值
换句话说,改变的是指针所指向的值,而不是指针。即使要将一个对象赋值给它本身,
赋值操作符也必须总是保证
正确。本例中,即使左右操作数相同,操作本质上也是安全的,
因此,不需要显式检查自身赋值。
*/
class hasptr
{
public:
hasptr(const int& p,int i):ptr(new int(p)),vi(i){}
hasptr(const hasptr& org):ptr(new int(*org.ptr)),vi(org.vi){}
hasptr& operator=(const hasptr&);
~hasptr(){delete ptr;}
int get_ptr_var()const{return *ptr;}
int get_int()const{return vi;}
void set_ptr(int *p){ptr=p;}
void set_int(int i){vi=i;}
int* get_ptr()const{return ptr;}
void set_ptr_vi(int i)const{*ptr=i;}
private:
int *ptr;
int vi;
};
hasptr& hasptr::operator=(const hasptr& org)
{
*ptr=*org.ptr;
vi=org.vi;
return *this;
}
int main()
{
system("pause");
return 1;
}
标签:
原文地址:http://www.cnblogs.com/yanliang12138/p/4396083.html