您当前的位置: 首页 >  c++

txwtech

暂无认证

  • 2浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

c++深复制与浅复制区别代码示范vs2015-txwtech

txwtech 发布时间:2019-11-29 12:02:42 ,浏览量:2

c++深复制与浅复制区别代码示范

区别:

深复制:

CDemo B = A;

B.str[0] = 'K';//B对象里面的元素修改后,A里面不会发生改变。

//--------深复制-----------复制构造函数     CDemo(CDemo &obj1)     {         this->a = obj1.a;         this->str = new char[1024];//用new关键字动态分配内存,就是深复制。         if (str!=0)         {             strcpy(this->str,obj1.str);         }     }

 

浅复制:

因为调用是隐藏的,看不见的,默认的,自动生成的,复制构造函数。

CDemo B = A;

B.str[0] = 'K';//B对象里面的元素修改后,A里面一起发生改变。

//---------浅复制-----------复制构造函数     CDemo(CDemo& obj)     {        this->a = obj.a;        this->str = obj.str;//这句是浅复制             }     //在测试时,分别屏蔽浅复制与深复制,查看结果。txwtech

//自己写了复制构造函数,必须写析构函数释放指针

 

#define _CRT_SECURE_NO_WARNINGS
#include 


using namespace std;
class CDemo
{
public:
	CDemo(int pa, char *cstr)
	{
		this->a = pa;
		this->str = new char[1024];//传递指针,必须使用new动态开辟一块空间
		strcpy(this->str,cstr);

	}
	//如下是隐藏的,看不见的,默认的,自动生成的,复制构造函数,这个是
	
	//---------浅复制-----------
	//CDemo(CDemo& obj)
	//{
	//	this->a = obj.a;
	//	this->str = obj.str;//这句是浅复制
	//	
	//}
	//在测试时,分别屏蔽浅复制与深复制,查看结果。txwtech

	//写成深复制构造函数,自己写出来---

	//--------深复制-----------
	CDemo(CDemo &obj1)
	{
		this->a = obj1.a;
		this->str = new char[1024];//用new关键字动态分配内存,就是深复制。
		if (str!=0)
		{
			strcpy(this->str,obj1.str);
		}
	}
	//自己写了复制构造函数,必须写析构函数释放指针
	~CDemo()
	{
		delete str;
	}
	


public:
	int a;
	char *str;
	

//private:

};



int main()
{
	CDemo A(10,"hello1");
	cout             
关注
打赏
1665060526
查看更多评论
0.1212s