【c++程序】深层复制构造函数

/*为了解决浅层复制导致的迷途指针问题,必须创建自己的复制构造函数,
  并且在函数里为我们的成员变量分配内存。这样,在分配完内存后,旧对
  象的成员变量就可以复制到新的内存区域中,两个对象的成员变量都各自
  拥有自己的内存的区域,一个对象析构后不影响到另一个,我们把这种复
  制方式叫做深层复制*/
#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的指针成员指向另一块内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值