/*为了解决浅层复制导致的迷途指针问题,必须创建自己的复制构造函数,
并且在函数里为我们的成员变量分配内存。这样,在分配完内存后,旧对
象的成员变量就可以复制到新的内存区域中,两个对象的成员变量都各自
拥有自己的内存的区域,一个对象析构后不影响到另一个,我们把这种复
制方式叫做深层复制*/
#include<iostream>
using namespace std;
class A
{
public:
A(){x=new int;*x=5;}
~A(){delete x;x=0;}
A (const A&a)//深层的复制构造函数
{
cout<<"复制构造函数执行"<<endl;
x=new int;
*x=*(a.x);
}
int print()const{return *x;}
void set(int i){*x=i;}
private:
int *x;
};
int main()
{
A*a=new A();
cout<<"a:"<<a->print()<<endl;
A b=(*a);
cout<<"a:"<<a->print()<<endl;
cout<<"b:"<<b.print()<<endl;
a->set(32);
cout<<"a:"<<a->print()<<endl;
delete a;//删除a不会影响b
cout<<"b:"<<b.print()<<endl;
return 0;
}//复制对象a的指针成员指向一块内存,复制对象b的指针成员指向另一块内存
【c++程序】深层复制构造函数
最新推荐文章于 2022-12-21 18:24:28 发布