说明一下几个词的关系:拷贝 复制 赋值 初始化
因为以前一直没深究它们的区别,直到拜读了C++ Primer 5和C++ Primer Plus 6之后,发现前者使用的是“拷贝构造函数”,后者则是“复制构造函数”,再联想到C++中经常出现的拷贝、赋值、复制这三个词语,所以这里进行一个个人总结。
拷贝和复制这两个词语本身语义或许有差别,但是在C++语言中可以认为二者是等价的,即拷贝构造函数和复制构造函数是一个意思,通常说对一个对象进行拷贝,也可以说对一个对象进行复制,二者等价,未免歧义,后文全部使用拷贝。至于赋值和初始化的区别是个老生常谈的问题,对于单个变量而言,初始化表示现在创建一个新的变量,它的初始值来自一个已经存在的对象,即原来没有值,现在第一次给它一个初值就叫初始化(注意变量在声明的时候就需要初始化)。赋值是两个变量已经有值的情况下,将一个变量值去替换另一个变量值。现在将普通变量对象换成类对象来理解,类对象也有初始化和赋值操作,只是对象变得复杂一点而已。类的初始化分为直接初始化和拷贝初始化,这里只讲拷贝初始化(直接初始化是类的构造函数做的事),即类对象的拷贝初始化是调用拷贝构造函数来完成的,而类对象的赋值操作是调用类的拷贝赋值运算符。也就是说“=”运算符,作用于普通变量对象和类对象间都叫赋值操作,只不过类对象将“=”进行了重载,使之变为自己特有的赋值操作,仅此而已。

C++ 拷贝、复制、赋值 、初始化的理解相关推荐

  1. 对于拷贝构造函数和赋值构造函数的理解

    昨天晚上在看智能指针的时候,我发现自己连一个拷贝构造函数和赋值构造函数都写不出来,自己就尝试写了一个版本,结果发现错误百出,对于拷贝构造函数和赋值构造函数的理解仅仅停留在理论的方面,而不知其中太多的内 ...

  2. 【C++】拷贝,赋值与构造

    拷贝,赋值与构造 文章目录 拷贝,赋值与构造 1. 拷贝构造函数/合成拷贝构造函数(copy constructor) 2. 拷贝赋值运算符 3. 析构函数 1. 拷贝构造函数/合成拷贝构造函数(co ...

  3. C++——构造函数(拷贝构造,拷贝复制),析构函数,操作符重载

    C++--构造函数(拷贝构造,拷贝复制),析构函数,操作符重载 构造函数与析构函数:: 涉及构造函数还可以看这篇文章C++搞懂深拷贝初始化=与赋值=的区别 1.声明和定义构造函数和析构函数 构造函数在 ...

  4. Qt/C++工作笔记-vector与QVector的拷贝复制(区别与联系)

    [注意:不要一个个遍历去赋值,有专门的函数可以拷贝复制] 首先是传统的vector. 他的拷贝复制有3种,一是构造函数,二是利用assign函数,三是利用swap函数. 代码如下: #include ...

  5. Java拷贝(赋值、浅拷贝、深拷贝)

    文章目录 拷贝 直接赋值 浅拷贝 实现方式 特殊情况 深拷贝 实现方式 多层克隆 拷贝 直接赋值 直接赋值的方式没有生产新的对象,只是生新增了一个对象引用 浅拷贝 如果原型对象的成员变量是值类型,将复 ...

  6. C++知识点38——拷贝赋值运算符、析构函数、=default、阻止拷贝和赋值

    一.拷贝赋值运算符 介绍拷贝赋值运算符,先简单说下重载运算符的知识.重载运算符本质依然是函数的重载,重载运算符的函数名由operator关键字和运算符的符号组成,和其他函数类似,可以有形参和返回值. ...

  7. c++拷贝、赋值和销毁的简单介绍

    13.1拷贝.赋值与销毁 13.1.1拷贝构造函数 当定义一个类时,我们显式或者隐式地指定在此类型的对象的拷贝.赋值.移动.销毁时做什么.一个类通常通过5种特殊的构造函数来控制这些操作,包括:拷贝构造 ...

  8. 列表初始化和赋值初始化的使用注意事项

    成员变量初始化方式有两种:列表初始化和赋值初始化.如下代码.但是这两种初始化表面上看着相同,但是用法和原理却并不相同.本篇博客主要讨论这两种初始化的使用方法和基本原理. class Test {pub ...

  9. caffe模型文件解析_深度学习 Caffe 初始化流程理解(数据流建立)

    深度学习 Caffe 初始化流程理解(数据流建立) 之前在简书的文章,搬迁过来 ^-^ 本文是作者原创,如有理解错误,恳请大家指出,如需引用,请注明出处. #Caffe FeatureMap数据流的建 ...

最新文章

  1. 二分类吸引子和鞍点的准确率的表达式ca
  2. 奇怪的问题,.Net 2.0发送邮件失败...
  3. AFN\HTTPS\UIWebView
  4. python图片识别是否p过_Python+Opencv进行识别相似图片
  5. 米度教育零基础三个月学会机器学习视频总结
  6. python中set index_Python set_index和reset_index详解
  7. DBGrid 应用全书
  8. 嵌入式打印机系统移植支持HP LaserJet 1020 plus 激光打印机和HP DeskJet 1010喷墨打印机
  9. 华为7c手机怎么恢复出厂设置_华为荣耀畅玩7A/7C解锁教程_荣耀畅玩7A/7C用官方解锁码解锁方法...
  10. 安装软件出现错误处理:internal error2503/2502
  11. JavaScript实现的手风琴图片切换,鼠标悬停任意图片html前端源码
  12. 如何利用微信答题小程序实现盈利呢
  13. centos 计算器_计算初学者进行服务器centos 7.6系统及orca、xtb、gaussian 16软件的安装乱谈...
  14. 使用阿里巴巴图标库生成iconfont字体图标
  15. 解决MySQL导入.CSV数据中文乱码
  16. paper reading——《Improving Person Re-identification by Attribute and Identity Learning》
  17. C#ObjectArx Cad删除实体
  18. 解决win10系统桌面应用图标显示不出来的问题
  19. 软件工程师的自白:真希望自己从没学过编码
  20. uni-app和vue什么关系?

热门文章

  1. 东南大学计算机专业课压分,初试压分怎么办,上岸前辈诚心推荐,这些院校很公正~...
  2. php查看curl扩展重新安装,PHP-Curl扩展库安装
  3. C++基础之:memset 、ZeroMemory和 “={0}” 三者区别及危险需慎用
  4. 前端代码开发规范。web开发规范。web开发注意事项。前端开发如何写出更规范的代码
  5. java实现企业排班考勤管理系统项目源码设计与实现(一)
  6. 安全卫士——Day01_1
  7. MATLAB中plot与line,Matlab Plot 和 Line区别
  8. LG Gram 2018 z980 白
  9. 初探12306售票算法
  10. 打开系统相册选取图片