深层复制构造函数

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值