c++深层复制构造函数使用实例代码

c++深层复制构造函数使用实例代码,为了解决浅层复制狗战术导致的迷途指针问题,我们必须创建复制构造函数,并且在函数里为我们的成员变量分配内存,这样,在分配内存后,旧对象的成员变量就可以复制到新的内存区域中,两个对象的成员变量都各自拥有自己的内存区域,一个对象在析构后不再会影响另一个,我们把这种复制构造方式叫做深层复制。

#include <iostream>
using namespace std;

class A{
public:
A(){x=new int; *x=5;}
~A(){delete x;x=NULL;}
A(const A&a){//定义c++深层复制构造函数,参数设定为const
cout<<”复制构造函数执行…\n”;
x=new int;//用复制构造函数创建的新对象的指针成员x来指向它,这样两个对象的x指针都指向新空间
*x=*(a.x);//复制指针指向的空间处的值,而不是两个对象的指针成员x
}
void print()const{cout<<*x<<endl;}//输出x指针指向的数据
void set(int i){*x=i;}
private:
int *x;
};

int main(){
A*a=new A();
cout<<”a:”;
a->print();//print函数会输出该对象的成员c++指针x指向的空间中保存的值
cout<<endl;
A b=(*a);//将对象a复制给b,深层复制x指针指向的空间中的值,而不是两个对象的x指针
a->set(99);//c++对象a的成员修改为99,但对象b没有影响
cout<<”复制后的对象a:”;
a->print();//输出与上同样的数,说明两个指针指向同一个内存空间
cout<<”复制后的对象b:”;
b.print();//输出与上同样的数,说明两个指针指向同一个内存空间
//delete b;这句程序是错的
delete a;//这句可以编译,删除对象a,并不会影响对象b
return 0;

} 本文链接地址: c++深层复制构造函数使用实例代码