c++八股day3-c++什么时候生成默认拷贝构造函数

2023-09-17 23:12:00

背景:如果不提供,就是浅拷贝,即位拷贝(把值按字节复制过去)

位拷贝的危害:

1、比如某个类的对象当中有堆上的资源(里面有一个指针指向了堆上的资源)

2、文件句柄、socket

3、虚函数表指针可能会丢失

。。。如果是位拷贝,就会出现两个对象持有相同的堆上资源、文件句柄

如果有一个对象释放,释放时会把堆上资源进行释放,把文件句柄进行清空,另一个对象是通过位拷贝(浅拷贝)得来的,会持有相同的堆上资源、文件句柄,那它对应的数据操作文件的时候就会发生异常,比如操作堆上数据会报错

什么时候会触发拷贝构造函数?

a.赋值

A b;

1、A a(b);

2、A a=b;

b.函数传参,形参为类对象

c.函数返回值:

默认的时候,c++会开启编译器优化,通常称之为返回值优化

A func(){
  A a;//如果有优化,只会调用这一次构造函数
  ...//基于a进行的一些操作
  return a;//如果去掉优化,(c++11)a就是一个将亡值
}

可能有:
A a=func();
去掉优化后,首先把函数中的a变成将亡值将亡值赋值给a时首先考虑的是移动构造,比如a(函数里的a)上有一些资源(堆上的资源、文件句柄、socket等),把这些资源移动给a的对象

如果去掉优化,c++11以上,

1、看类有没有移动构造

2、然后看类有没有拷贝构造

3、如果这两个都没有,就报错了

什么时候生成默认拷贝构造函数?

编译器编译的时候生成,为什么要生成,因为不得不生成(为了避免出现一些问题)(因为会和c++语法冲突,编译器要维护语法一致,所以需要再某些情况下不得不生成)

1、类成员变量也是一个类,该成员类有默认拷贝构造函数

class A{
private:
    B b;
};

类B有默认的拷贝构造函数,所以再构造类A时为了能够调用类B的默认拷贝构造函数,A必须要构造一个拷贝构造函数

b.类继承自一个基类,该基类(父类)有默认拷贝构造函数(也是为了能够调用到父类的拷贝构造函数,必须生成一个)

c.类成员中有一个或多个虚函数(防止浅拷贝)(避免虚函数表指针丢失)

d.类继承自基类,基类中有虚函数

更多推荐

拼多多app商品详情原数据API接口【详情页优惠券数据】APP端商品详情数据

拼多多app商品详情原数据API接口可以获取拼多多平台上某个商品的详细信息,包括商品标题、价格、图片、规格、参数、店铺信息等。要使用这个接口,需要先在拼多多平台注册一个开发者账号,并为每个拼多多应用注册一个应用程序键(AppKey)。然后需要下载拼多多API的SDK并掌握基本的API基础知识和调用。通过这个接口获取到的

RP9-0 快捷键与注意

1.快捷键.或者ctrl+.可以快速预览按住空格,鼠标就会变成手ctr+9回到页面原点2.注意有的动作要元件先获取焦点有的动作要元件先获取焦点文本输入框中的值要用.text截图工具SnipasteDownloadsSnipaste-截图+贴图快速吸取颜色C键,按住shift可以在RGB和HEX间切换腦圖:Xmind思维

Java版本spring cloud + spring boot企业电子招投标系统源代码

项目说明随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化平台提高招投标工作的公开性和透明性;通过电子化招投标,使得招标采购的质量更高、速度

【面试题】——Java基础篇(35题)

文章目录1.八大基本数据类型分类2.重写和重载的区别3.int和integer区别4.Java的关键字5.什么是自动装箱和拆箱?6.什么是Java的多态性?7.接口和抽象类的区别?8.Java中如何处理异常?9.Java中的final关键字有什么作用?10.什么是Java的序列化和反序列化?11.Java中的Strin

下一个时代的船舵,李彦宏握住AI原生应用

相信大家都能感觉到,科技企业和开发者们正在积极转动航向,投身汹涌澎湃的大模型浪潮。越来越多基于大模型的AI应用和插件被推出,但从整体比例上看,AI原生应用的数量规模,远算不上百花齐放。可以回想一下历史上的技术革命,所有科技成果进入生活,靠的是一大群人充分释放智慧和想象力。电气化时代,商场里摆满了让人眼花缭乱的家用电器,

睿趣科技:新手商家如何做好抖音店铺

抖音,作为全球热门的社交媒体平台之一,不仅仅是分享有趣视频的地方,也是许多商家拓展业务的黄金平台。对于新手商家来说,如何在抖音上建立一个成功的店铺是一项重要的任务。以下是一些关于如何做好抖音店铺的建议。明确你的目标和定位:在开设抖音店铺之前,首先要明确你的目标和定位。你要销售什么样的产品或提供什么样的服务?你的目标客户

JVM 篇

目录一、知识点汇总二、知识点详解2.1JVM的主要组成部分及其作用2.2JVM内存模型2.3堆与栈的区别2.4JVM加载class文件的原理机制2.5类的生命周期2.6Java对象结构2.7Java对象创建过程2.8指针碰撞2.9空闲列表2.10TLAB+CAS2.11说说对象内存分配2.12什么是标量与聚合量?2.1

OpenCV自学笔记十六:直方图处理

在OpenCV中,直方图(Histogram)是用于表示图像中像素强度分布的一种统计工具。它可以帮助我们了解图像的亮度、对比度、色彩分布等信息。OpenCV提供了一个函数`cv2.calcHist()`,用于计算图像的直方图。该函数接受图像数组和一些参数,例如要计算的通道数、区间的数量等。它返回一个表示直方图的一维数组

智荟康午休课桌椅成为第十届中国慈善展览会公益亮点产品

第十届中国慈善展览会(以下简称“慈展会”)于9月15日至17日在深圳会展中心隆重举办,此次展会为期3天,主要围绕“共建现代化慈善,聚力高质量发展”的主题,重点聚焦聚力民生福祉,将打造“一展多元”的展会新格局。本届慈展会共有2931家机构、2882个项目参展。开幕当天,意向对接重大捐赠项目、消费帮扶产品采购及产业投资等资

网络工程师的爬虫技术之路:跨界电商与游戏领域的探索

随着数字化时代的到来,跨界电商和游戏行业成为了网络工程师们充满机遇的领域。这两个领域都依赖于高度复杂的技术来实现商业目标和提供卓越的用户体验。本文将深入探讨网络工程师在跨界电商和游戏领域的技术挑战以及应对这些挑战的方法。突破技术障碍的爬虫应用跨界电商业务通常需要大量的市场数据和竞争情报,而这些信息可能分散在全球各个网站

电机控制器HIL测试系统:实现高效、安全的硬件在环验证

电机控制器作为电动机系统的关键组成部分,其应用前景广泛,涵盖新能源汽车、工业自动化、航空航天、能源、医疗器械等领域。随着对环保、自动化和智能化的需求增加,电机控制器将在这些领域中扮演关键角色,为实现可持续发展和智能化生产提供强有力支持。同时,随着技术的不断进步,电机控制器的性能将得到进一步提升,为各行业提供更高效、可靠

热文推荐