class Hasptr {
public:
Hasptr(int *p, int i):ptr(p),val(i) { }
~Hasptr() { std::cout << "~Hasptr() " <<std::endl; delete ptr; }
int *get_ptr() const { return ptr; }
int get_int() const { std::cout << val <<std::endl; return val; }
void set_ptr(int *p) { ptr = p; }
void set_int(int i) { val = i; }
int get_ptr_val() const { std::cout << *ptr <<std::endl; return *ptr; }
void set_ptr_val(int val) const { *ptr = val; }
private:
int *ptr;
int val;
};
int main()
{
// #
int obj = 0;
Hasptr ptr1(&obj,42);
Hasptr ptr2(ptr1);
ptr1.set_int(0);
ptr2.get_int();
ptr1.get_int();
ptr2.set_ptr_val(22);
ptr1.get_ptr_val();
ptr2.get_ptr_val();
//如果把从#到这里的代码注释掉运行会出错,如果不注释掉则能运行,请问这是为什么?
int *ip = new int(44);
Hasptr ptr(0,10);
ptr.set_ptr(ip);
Hasptr ptrptr(ptr);
ptr.~Hasptr();
ptr.set_ptr_val(33);
ptrptr.set_ptr_val(33);
ptr.get_ptr_val();
ptrptr.get_ptr_val();
return 0;
}