全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++对象的浅复制和深复制详解及简单实例

C++对象的浅复制和深复制详解及简单实例

浅复制:两个对象复制完成后共享某些资源(内存),其中一个对象的销毁会影响另一个对象

深复制:两个对象复制完成后不会共享任何资源,其中一个对象的销毁不会影响另一个对象

下面我们来看一段代码,以便直观的理解:

#include<iostream> 
#include<string.h> 
using namespace std; 
class Student 
{ 
  int no; 
  char *pname; 
public: 
  Student(); 
  Student(int n,char* p); 
  ~Student(); 
  void display(); 
}; 
 
Student::Student(){} 
 
Student::Student(int n,char* p) 
{ 
  no=n; 
  pname=new char[10]; 
  strcpy(pname,p); 
} 
 
Student::~Student() 
{ 
  delete []pname; 
} 
 
void Student::display() 
{ 
  cout<<"学号:"<<no<<",姓名:"<<pname<<endl; 
} 
 
void main() 
{ 
  Student s(10,"xiaoming"),t; 
  t=s; 
  cout<<"s="; 
  s.display(); 
  cout<<"t="; 
  t.display(); 
} 

这段程序看上去是正确的,但是执行就会出错,原因就是复制语句t=s,此语句执行的复制是浅复制,s将pname指针指向的地址赋给s的pname,它们就会指向相同的内存空间,当t被析构时,t.pname所指的内存空间就被释放了,再执行s的析构函数就会出错。

如果采用深复制就可以避免这个问题,下面我们用运算符重载函数实现深复制:

Student& Student::operator = (Student& s) 
{ 
  no=s.no; 
  int len=strlen(s.pname); 
  pname=new char[len+1]; 
  strcpy(pname,s.pname); 
  return *this; 
} 

在执行t=s时,运算符重载函数内已为t分配内存空间。

对于上述运算符重载函数有两点说明:

1.形参一定要是引用类型,否则执行t=s时,就要先将实参s复制到形参s,这个过程是浅复制,没有为形参s分配内存空间,运行会出错;

2.返回值一定要是引用类型,因为执行t=s相当于执行t.=(s),若返回值不是引用类型,那么还要将函数的返回对象复制到t,又会出错

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C++  # 浅复制和深复制  # 浅复制和深复制详解  # 浅复制和深复制实例  # C++ STL标准库std::vector扩容时进行深复制原因详解  # C++小知识:复制粘贴代码千万要小心  # C++连连看判定图形消除算法  # C++实现连连看消除算法  # c++  复制消除问题解决示例详析  # 就会  # 运算符  # 其中一个  # 返回值  # 完成后  # 这个问题  # 这段  # 希望能  # 就可  # 又会  # 要将  # 谢谢大家  # 先将  # 已为  # 有两点  # 看上去是  # 和深  # 以避免  # gt  # string 


相关文章: Swift中循环语句中的转移语句 break 和 continue  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  如何通过WDCP绑定主域名及创建子域名站点?  如何快速搭建高效可靠的建站解决方案?  如何零基础在云服务器搭建WordPress站点?  如何确认建站备案号应放置的具体位置?  Python文件管理规范_工程实践说明【指导】  大连 网站制作,大连天途有线官网?  动图在线制作网站有哪些,滑动动图图集怎么做?  如何用免费手机建站系统零基础打造专业网站?  如何用y主机助手快速搭建网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  南宁网站建设制作定制,南宁网站建设可以定制吗?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  如何高效搭建专业期货交易平台网站?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  建站之星图片链接生成指南:自助建站与智能设计教程  c# 服务器GC和工作站GC的区别和设置  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  如何通过商城免费建站系统源码自定义网站主题?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  建站主机无法访问?如何排查域名与服务器问题  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  Android滚轮选择时间控件使用详解  高端建站三要素:定制模板、企业官网与响应式设计优化  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  C++如何编写函数模板?(泛型编程入门)  建站之星安装模板失败:服务器环境不兼容?  如何在阿里云香港服务器快速搭建网站?  网站制作壁纸教程视频,电脑壁纸网站?  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  哈尔滨网站建设策划,哈尔滨电工证查询网站?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  简历在线制作网站免费版,如何创建个人简历?  如何选择PHP开源工具快速搭建网站?  再谈Python中的字符串与字符编码(推荐)  广州营销型建站服务商推荐:技术优势与SEO优化解析  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  家庭服务器如何搭建个人网站?  如何在Windows环境下新建FTP站点并设置权限?  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何通过PHP快速构建高效问答网站功能?  建站之星后台密码遗忘?如何快速找回?  如何快速搭建安全的FTP站点?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  如何快速搭建FTP站点实现文件共享? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。