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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?