深拷贝与浅拷贝

下面为作者的总结以深刻理解深拷贝和甜拷贝
深拷贝:如果创建类对象时,相应的构造函数内用运算符new为对象的数据成员申请内存空间,那么在析构函数中应该用运算符 delete释放相应的内存空间。
当创建对象并用已经存在的对象进行初始化时,必须自定义拷贝构造函数。
在拷贝构造函数内使用new运算符为新对象申请内存空间,把已经存在的对象的内存空间中的数据拷贝到新对象申请的内存空间中,这种拷贝过程即称为深拷贝。

 浅拷贝:与深拷贝的概念相对应,不采用上述深拷贝方法实现对象的拷贝即称为浅拷贝。通常情况下,如果类的构造函数内没有用new运算符为对象的数据成员申请内存空间,析构函数中也不用 delete运算符释放内存空间,则不需要自定义拷贝构造函数,使用编译器提供的默认拷贝构造函数即可。


下为深拷贝的代码案例:

#include <iostream>
#include <string>
#include <cstring>
#include <iomanip>
#include <array>
using namespace std;class student {public:student (const string & = " ", int = 19, double = 0, double = 0, double = 0);student (const student &);~student ();double avgscore();private:string strname;//描述学生姓名int age;//描述学生年龄double *score;//指针,用来储存三门课的成绩
};
//实现构造函数
student::student(const string &name, int nage, double nmath, double neglish, double npe) {strname = name;age = nage;score = new double[3];score[0] = nmath;score[1] = neglish;score[2] = npe;
}
//实现折构函数
student::~student() {delete []score;
}student::student(const student &s) {//实现拷贝构造函数strname = s.strname;age = s.age;score = new double [3];//为当前对象score申请内存空间score[0] = s.score[0];score[1] = s.score[1];score[2] = s.score[2];
}
double student::avgscore() {return (score[0] + score[1] + score[2]) / 3;
}int main() {student s1{"janni", 23, 45.5, 78.7, 95.2};cout << s1.avgscore() << endl;student s2{s1};cout << s2.avgscore() << endl;
}

很多人都不知道的小秘密,c++中拷贝分为两种相关推荐

  1. php h5支付没有返回app中,很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法...

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  2. 很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  3. 99.99%人都不知道的“##“里用法

    99.99%人都不知道的"##"里用法 转:原文链接<99.99%人都不知道的"##"里用法> 编者荐语: 来来来,学习一些C语言骚气的操作! 以下 ...

  4. 苹果手机小技巧大全计算机,80%的人都不知道的五个iPhone实用小技巧,不知道的话赶紧看看...

    原标题:80%的人都不知道的五个iPhone实用小技巧,不知道的话赶紧看看 现在越来越多的人使用iPhone手机,而且iPhone新机也是出了一段时间了,但是还是有很多人不知道iPhone中的一些隐藏 ...

  5. C语言边沿触发函数,边沿触发在Verilog中又分为两种-Read.PPT

    技术廖义奎第章编程基础本次课内容过程赋值行为描述过程中并没有进程的概念但却有与进程相同功能的三种过程分别是和模块实例这三种在执行的方式上与进程一样在过程之间是并行执行的模块实例已在前面介绍过将在赋值一 ...

  6. 很多人都不知道学了c/c++到底能做什么?让大牛来告诉你............

    如今学习编程的同学越来越多,也有很多人想转行去学习这个,但是大多数人学习这个都是看到工资高,自己喜不喜欢,学了能做什么都不知道,今天就给大家分享一下,学了C/C++,你们能往哪些方向发展,希望能对你们 ...

  7. 技术面试之反向面试问什么?很多人都不知怎么问。

    很多同学都曾经跟我反映过这样一个问题,当一场面试临近尾声,当面试官问:"我的问题都问完了,请问下你有什么问题要问我的么?"这样的问题该怎么回答?很多同学总觉得问薪资太俗,问一些细节 ...

  8. 抖音变现模式?80%的人都不知道的秘密,三类更适合玩私域的产品

    这篇内容关于适合玩私域的三类产品,精简一下让大家可以3分钟看完.不玩悬念,直接上千货. 上一篇在我赢助手小禾呈序上给大家讲了三个变现的建议,以及两种我比较推荐的变现方式.带货和支付费.今天再讲一个主流 ...

  9. 90%的人都不知道的Node.js 依赖关系管理(上)

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 引言 Node.js中的一个重要概念是依赖关系管理.本文就将带大家了解依赖管理的各种模式以及Node.js如 ...

最新文章

  1. JAVA基础知识之Set集合
  2. 开发日记-20190519 关键词 Linux学习路径
  3. [YTU]_2911 ( 我想放假)
  4. 小白 初步识别读取距离
  5. 写给自己,2020的年终总结
  6. 对Faster R-CNN的理解(1)
  7. 这篇带你熟悉 SpringBoot+RabbitMQ 方式收发消息
  8. python和对象复习_python 面向对象基础和高级复习
  9. 网页设计师必备的35套图标(免费下载)
  10. 洛谷 P2894 酒店 Hotel
  11. 链接mysql工具封装_JDBC——java连接MySQL封装处理
  12. HTML 参考手册 - 浏览器支持
  13. 共享打印机提示服务器没有运行,winXP共享打印机提示“工作站服务没有启动”|没有启动服务器Workstation服务...
  14. matlab 排序 sorttrows
  15. 海思视频码率参数解析
  16. 计算机音乐谱老纸老虎,二年级下册音乐教案第六单元《两只老虎》人音版(简谱)...
  17. mysql表join和union_mysql – 使用JOIN和UNION组合来自不同表的记录
  18. Microsoft Xps Document Writer 虚拟打印机安装
  19. Vuex Actions使用
  20. 趣图:你永远想不到用户怎么使用你的产品

热门文章

  1. php sqlserver jdbc,jdbc sqlserver 分页
  2. Flask学习 视频网站搭建(Python-flask视频网站搭建)
  3. 男程序员怎么保养皮肤【护肤】?
  4. Visual Studio 中Debug模式和Release模式的区别
  5. JVM PrintGCDetails打印GC细节
  6. 去除字符串中的指定字符
  7. 手写Spring-ioc 注入 jdk反射实现 绝对满足你的好奇心哦 解决怎么我写了一个注解就可以直接注入了?
  8. python画圆填色_python turtle我想用五种颜色画五个圆,并且用画圆周的颜色填充,老是出问题,怎么回事,怎么修改?:python教程同心圆...
  9. 网站刷关键词_中小企业网站排名如何做SEO优化 - 刷百度关键词排名
  10. windows11图文安装流程