#include
#include
#include
using namespace std;
class HasPtr
{
public:
HasPtr(int *p, int i):ptr(p), val(i){}
int *get_ptr() const {return ptr;}
int get_int() const {return val;}
void set_ptr(int *p) {ptr = p;}
void set_int(int v) {val = v;}
int get_ptr_val() const { return *ptr;}
void set_ptr_val(int val) const {*ptr = val;}
public:
int *ptr;
int val;
};
int main(int argc, char *argv[])
{
int obj = 0;
HasPtr ptr1(&obj, 42);
HasPtr ptr2(ptr1);
//此时ptr1的val 和 ptr 与ptr2 的地址是一致的
ptr1.set_int(34); //复制一个算术值时,副本独立于原版,可以改变一个副本而不改变另一个
cout << ptr1.get_int() << " " << ptr2.get_int() << endl;
ptr1.set_ptr_val(45); //复制指针时,地址值是可区分的,但指针指向同一基础对象。如果在任一对象上调用 set_ptr_val,则二者的基础对象都会改变
cout << *(ptr1.ptr) << " " << *(ptr2.ptr)<<endl;
//
int *intp = new int(10);
HasPtr ptr3(intp, 20);
delete intp;
intp = NULL;
ptr3.set_ptr_val(22);
cout << *(ptr3.ptr)<<endl;
return 0;
}
int *intp = new int(10);
HasPtr ptr3(intp, 20);
delete intp;
intp = NULL;
ptr3.set_ptr_val(22);
cout << *(ptr3.ptr)<<endl;
intp删除了,程序照样执行,不知道为什么,ptr3.ptr 与intp指向同一个位置