#include <iostream> using namespace std; // 类内部指针成员的管理 //1. 指针成员采取常规指针型行为。这样的类具有指针的所有缺陷但无需特殊的复制控制 // By Evel class A { public: A(int* a, double b); //构造函数 void set_dou(double sa){ a2 = sa;} //设置double成员 void set_pt(int *sp){ a1 = sp;} //设置int*成员 int *get_pt() const {return a1;} //取得指针成员的值(一个地址),加const是为了不改变形参的值 double get_dou() const {return a2;} //取得double成员的值 int get_pt_val() const {return *a1;} //获得指针所指内容 void set_pt_val(int a) const {*a1 = a;} //设置指针所指向的内容 private: int *a1; double a2; }; A::A(int* a, double b) { a1=a; a2=b; } void main() { int va=9; A t1(&va, 99); A t2(t1); //默认拷贝构造函数,逐个拷贝。T1和T2指针指向9 t1.set_dou(0); //重新设置double成员的值,T2的double会保持原来的值。但是int指针仍然指向同一个数9. cout << t2.get_dou() << endl; //输出99 cout << t1.get_dou() << endl; //输出0 t1.set_pt_val(35); //重新设置t1指针所指对象值(从9变成35) cout << t2.get_pt_val() << endl;//t2的指针同样受到t1指针值的影响。输出35 int *p1 = new int(50); A t3(p1,45.5); //构造新的对象t3 cout << t3.get_pt_val() << endl; //删除p1所指对象之前,t3中的指针和p1所指都是50 delete p1; cout << t3.get_pt_val() << endl; //当删除掉p1之后,t3中的指针成员悬垂,没有指向某个值; } 这样具有指针成员的类对象缺点是删除某对象是,类出现悬垂指针。