#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; }
时间: 2024-10-10 10:28:45