#includeusing namespace std;class Person{public: Person() { cout<<"Person的默认构造函数调用"<<endl; } Person(int age,int height) { m_age=age; m_height=new int(height);//堆区 cout<<"Person的有参构造函数调用"<<endl; } //自己实现拷贝函数 ,解决浅拷贝带来的问题 Person(const Person &p) { cout<<"Person拷贝构造函数调用"<<endl; m_age=p.m_age; //m_height=p.m_height;编译器默认实现就是这行代码(浅拷贝) //深拷贝 m_height=new int(*p.m_height); } ~Person() { //析构代码,将堆区开辟数据作释放操作 if(m_height!=NULL) { delete m_height; m_height=NULL; }//正常情况下,应该会崩溃 cout<<"Person的析构函数调用"<<endl; } int m_age; int *m_height;//把身高的数据开辟到堆区 };void test01(){ Person p1(18,160); cout<<"p1的年龄为:"<<p1.m_age<<"身高为:"<<*p1.m_height<<endl; Person p2(p1);//编译器提供了浅拷贝函数 cout<<"p2的年龄为:"<<p2.m_age<<"身高为:"<<*p2.m_height<<endl;}int main(){ test01();}
你这代码 太乱了吧