您的位置:首页 > 编程语言 > C语言/C++

c++ 浅复制与深复制

2015-12-14 23:23 239 查看
1.c++中的默认复制构造函数属于浅复制,而浅复制很不好,下面一张图说明浅复制与深复制。



2.代码说明
#include<iostream>

#include<string>

using namespace std;

class test{

public:

test(int b,char *tr)

{

this->a = b;

this->str = new char[100];

strcpy(this->str,tr);

}

//这个就是默认的复制构造函数形式

test(test& obj)

{

this->a = obj.a;

this->str = obj.str;

}

public:

int a;

char *str;

};

int main()

{

test A(10,"Test");

cout<<"A :"<<A.a<<","<<A.str<<endl;

test B = A;

cout<<"B :"<<B.a<<","<<B.str<<endl;

B.a=9;

B.str[0]='t';

cout<<"修改之后:"<<endl;

cout<<"A :"<<A.a<<","<<A.str<<endl;

cout<<"B :"<<B.a<<","<<B.str<<endl;

system("pause");

return 0;

}
输出结果



,改变B.str[0]之后A.str[0]也改变了,这样子就出现了错误,实际中我们只希望改变B.str[0],而不是连A.str[0]也改变了。
所以为了避免这样的发生,应使用深复制。只需要将
//这个就是默认的复制构造函数形式

test(test& obj)

{

this->a = obj.a;

this->str = obj.str;

}

改为

//这个就是修改为深复制构造函数

test(test& object)

{

this ->a =object.a;

this ->str =new char[100];

if (str!=0)

{

strcpy(this->str,object.str);

}

}
输出结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: