每日一面——成员初始化列表、移动构造和拷贝构造
写前声明:参考链接 C++面经、面试宝典 等
✊✊✊每日一面——成员初始化列表、移动构造和拷贝构造
- 一、类成员初始化方式?构造函数的执行顺序?为什么用成员初始化列表会快一些?
- 二、final和override关键字
- 三、拷贝初始化和直接初始化
- 四、有哪些情况必须用到成员列表初始化?作用是什么?
- 五、什么情况下会调用拷贝构造函数?
- 六、拷贝构造函数如果用值传递会有什么影响?
- 七、说一说了解的移动构造函数?
一、类成员初始化方式?构造函数的执行顺序?为什么用成员初始化列表会快一些?
- 赋值初始化, 通过在函数体内仅赋值初始化
- 列表初始化,在冒号后使用初始化列表进行初始化
两种初始化的区别:
- 对于在函数体中初始化,是在所有的数据成员被分配内存空间后才进行的
- 列表初始化是给数据成员分配内存空间时就进行初始化,也就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进入函数体之前就给数据成员赋值了,即此时初始化数据成员时,函数体还未执行
一个派生类构造函数的执行顺序:
- 虚基类的构造函数(多个虚基类则按照继承的顺序执行构造函数)
- 基类的构造函数(多个普通基类也按照继承的顺序执行构造函数)
- 类类型的成员对象的构造函数(按照初始化顺序)
- 派生类自己的构造函数
法一是在构造函数中做赋值的操作,法二是纯粹的初始化操作。我们知道C++的赋值操作是会产生临时对象的,临时对象的出现会降低程序运行的效率
二、final和override关键字
override: 指定了子类这个虚函数是重写父类的
final: 当不希望某个类被继承,或不希望某个虚函数被重写,可以在类名和虚函数后添加final关键字
三、拷贝初始化和直接初始化
当用于类类型对象时,初始化的拷贝形式和直接形式有所不同:直接初始化会直接调用于实参匹配的构造函数,而拷贝初始化总是调用拷贝构造函数。拷贝初始化首先使用指定构造函数创建一个临时对象,然后用拷贝构造函数将那个临时对象拷贝到正在创建的对象。
四、有哪些情况必须用到成员列表初始化?作用是什么?
-
必须使用成员初始化的四种情况
-
当初始化一个引用成员时;
-
当初始化一个常量成员时;
-
当调用一个基类的构造函数,而它拥有一组参数时;
-
当调用一个成员类的构造函数,而它拥有一组参数时;
-
-
成员初始化列表做了什么
-
编译器会一一操作初始化列表,以适当的顺序在构造函数之内安插初始化操作,并且在任何显示用户代码之前;
-
ist中的项目顺序是由类中的成员声明顺序决定的,不是由初始化列表的顺序决定的;
-
五、什么情况下会调用拷贝构造函数?
- 用类的一个实例对象区初始化另一个对象的时候
- 函数的参数是类的对象的时候(非引用)
- 函数的返回值是函数体内局部对象的类的对象时,此时发生(Named return Value优化)NRV优化,但是由于返回方式是值传递,所以会在返回值的地方调用拷贝构造函数
-
另:第三种情况在Linux g++ 下则不会发生拷贝构造函数,不仅如此即使返回局部对象的引用,依然不会发生拷贝构造函数
-
在c++编译器发生NRV优化,如果是引用返回的形式则不会调用拷贝构造函数,如果是值传递的方式依然会发生拷贝构造函数。
-
六、拷贝构造函数如果用值传递会有什么影响?
如果把拷贝构造函数的参数设置为值传递,那么参数肯定就是本类的一个object,采用值传递,在形参和实参结合的时候,是需要调用本类的拷贝构造函数,就形成一个死循环,是为了避免拷贝构造函数无线递归下去
七、说一说了解的移动构造函数?
-
有时候我们会遇到这样一种情况,我们用对象a初始化对象b后对象a我们就不在使用了,但是对象a的空间还在呀(在析构之前),既然拷贝构造函数,实际上就是把a对象的内容复制一份到b中,那么为什么我们不能直接使用a的空间呢?这样就避免了新的空间的分配,大大降低了构造的成本。这就是移动构造函数设计的初衷;
-
拷贝构造函数中,对于指针,我们一定要采用深层复制,而移动构造函数中,对于指针,我们采用浅层复制;
-
C++引入了移动构造函数,专门处理这种,用a初始化b后,就将a析构的情况;
-
与拷贝类似,移动也使用一个对象的值设置另一个对象的值。但是,又与拷贝不同的是,移动实现的是对象值真实的转移(源对象到目的对象):源对象将丢失其内容,其内容将被目的对象占有。移动操作的发生的时候,是当移动值的对象是未命名的对象的时候。这里未命名的对象就是那些临时变量,甚至都不会有名称。典型的未命名对象就是函数的返回值或者类型转换的对象。使用临时对象的值初始化另一个对象值,不会要求对对象的复制:因为临时对象不会有其它使用,因而,它的值可以被移动到目的对象。做到这些,就要使用移动构造函数和移动赋值:当使用一个临时变量对象进行构造初始化的时候,调用移动构造函数。类似的,使用未命名的变量的值赋给一个对象时,调用移动赋值操作
相关文章:
每日一面——成员初始化列表、移动构造和拷贝构造
写前声明:参考链接 C面经、面试宝典 等 ✊✊✊每日一面——成员初始化列表、移动构造和拷贝构造 一、类成员初始化方式?构造函数的执行顺序?为什么用成员初始化列表会快一些?二、final和override关键字三、拷贝初始化和直接初始化…...
OPC UA 服务器的Web访问
基于Web 的应用非常普及,例如基于web 的SCADA ,物联网 Dashboard 等等,那么基于Web 的应用如何访问OPC UA 服务器呢?本博文讨论这方面的问题。 Web 的通信方式 Web 是我们通常讲的网站,它由浏览器,HTTP 服…...
docker 子网
当需要给容器分配指定 ip ,为避免ip 冲突,指定容器子网处理 创建 subnet 子网 docker network create --subnet 10.0.0.0/24 --gateway 10.0.0.1 subnet-testdocker network ls NETWORK ID NAME DRIVER SCOPE ... f582ecf297bc sub…...
QT使用RabbitMQ
文章目录 1.RabbitMQ 客户端下载地址:1.1RabbitMQ基本结构:2.搭建RabbitMQ server3.安装步骤4.运行4.1 报错问题解决5.使用5.1 配置Web管理界面6.常用命令总结7.Qt客户端编译7.1 这里重点强调一下,这个文件需要改成静态库7.2 下载地址:(qamqp自己下载,下载成功后,静态编译…...
什么是R语言?什么是R包?-R语言001
R语言是一种专为统计计算和图形而设计的编程语言和环境。它最初由罗斯伊哈卡和罗伯特亨特尔在1993年创建,灵感来源于S语言。R语言已经发展成为统计学、数据分析、科学研究以及许多其他领域中最受欢迎和广泛使用的工具之一。R语言的核心是一个开源的解释型语言&#…...
Java17 --- springCloud之LoadBalancer
目录 一、LoadBalancer实现负载均衡 1.1、创建两个相同的微服务 1.2、在客户端80引入loadBalancer的pom 1.3、80服务controller层: 一、LoadBalancer实现负载均衡 1.1、创建两个相同的微服务 1.2、在客户端80引入loadBalancer的pom <!--loadbalancer-->&…...
Mac(含M1) 使用 brew 安装nvm
目录 Mac 安装nvm 下载命令 配置环境变量 刷新 Mac(M1) 安装nvm 搜索 下载 为nvm创建文件夹 配置环境变量 刷新 Mac 安装nvm 下载命令 brew install nvm 配置环境变量 vi ~/.zshrc 内容如下: export NVM_DIR"$HOME/.nvm"[ -s "/usr/local…...
优秀的前端框架vue,原理剖析与实战技巧总结【干货满满】
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属的专栏:前端零基础教学,实战进阶 景天的主页:景天科技苑 文章目录 Vuevue.js库的基本使用vue.js的M-V-VM思…...
<2024最新>ChatGPT逆向教程
前言 在使用本篇文章用到的项目以及工具时,需要对其有一定的了解,无法访问以及无法使用的问题作者不承担任何责任,可以自行想办法解决遇到的问题。 文章若有不合适,有问题的地方,请私聊指出,谢谢~ 准备工具 一台至少 2 核 2G 内存的服务器,推荐是位于香港、新加坡或…...
C#编程技巧--2
1.使用泛型: 泛型允许你编写更加灵活和可重用的代码,同时提高类型安全性。 C# 中的泛型功能允许你编写更加灵活和可重用的代码,并且可以增加类型安全性。通过使用泛型,你可以编写适用于不同类型的代码,而无需为每种类型单独重写代…...
设计模式 代理模式
代理模式主要使用了 Java 的多态,主要是接口 干活的是被代理类,代理类主要是接活, 你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢? 同根就成ÿ…...
关于学习时间
这篇文章我来说一下我对于我最近学习时间的一些思考。 早上和下午是我最为活跃和高效的时间段。 我能够专注地工作,不容易分心。 然而,到了晚上,我的状态开始下降,这是很正常的情况。 由于早上和下午的专注学习,我的大…...
Github:Your browser did something unexpected. Please try again.
问题概述 Github:Your browser did something unexpected. Please try again. If the error continues, try disabling all browser extensions. 问题原因: 提示是插件出了问题,关闭了所有插件也无法解决,搜索了一下说是VPN的问题…...
Django性能优化
1.服务器CPU太高的优化 在Django项目中使用line_profiler进行性能剖析,您需要遵循以下步骤来设置并使用它: 1. **安装line_profiler**: 在命令行中执行以下命令来安装line_profiler: pip install line_profiler …...
全网最详细Docker命令(分类总结)
默认存储容器地址 cd /var/lib/docker 容器生命周期 Docker 命令 开启docker : systemctl start docker 查看docker状态 :systemctl status docker 停止:systemctl stop docker 重启: systemctl restart docker docker开机自启…...
运维自动化之ANSIBLE
一、Ansible的发展史及功能 官网:https://www.ansible.com/ 官方文档:https://docs.ansible.com/ 1、Ansible功能 2、Ansible特性 批量执行远程命令,可以对远程的多台主机同时进行命令的执行 批量安装和配置软件服务,可以对远程的多台主机…...
算法训练day42leetcode01背包问题 416. 分割等和子集
01 背包 题目描述 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 题目分析 每一件物品其实只有两个状态,取或者不取&…...
VulnHub - DarkHole
希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢! 个人博客链接:CH4SER的个人BLOG – Welcome To Ch4sers Blog DarkHole 靶机下载地址:DarkHole: 1 ~ VulnHub 0x01 信息收集 Nmap扫描目标主机…...
前端学习笔记 | WebAPIs(DOM+BOM)
一、作用和分类 1、基本概念 作用:使用JS去操作HTML和浏览器 分类:DOM(文档对象模型)和BOM(浏览器对象模型) html的标签JS的DOM对象 2、获取DOM对象-参数必须加引号 (1)选择匹配的第…...
简易内存池(100%用例)C卷(JavaPythonC++Node.jsC语言)
请实现一个简易内存池 , 根据请求命令完成内存分配和释放。 内存池支持两种操作命令,REQUEST和RELEASE,其格式为: REQUEST=请求的内存大小 表示请求分配指定大小内存,如果分配成功,返回分配到的内存首地址;如果内存不足,或指定的大小为 0 ,则输出error。 RELEASE=释放的…...
生物信息学避坑指南:Scissor算法参数alpha和cutoff的黄金设置法则
生物信息学避坑指南:Scissor算法参数alpha和cutoff的黄金设置法则 在单细胞数据分析领域,如何有效整合bulk RNA测序数据与单细胞数据一直是研究者面临的挑战。Scissor算法通过巧妙设计,能够从含有表型的bulk RNA数据中提取关键信息࿰…...
告别CNN!用Swin-Unet在PyTorch 1.7上搞定医学图像分割(附完整代码与预训练权重)
医学图像分割实战:基于Swin-Unet的高效Transformer解决方案 医学影像分析领域正经历一场从传统卷积神经网络到Transformer架构的范式转变。去年在ECCV会议上亮相的Swin-Unet,作为首个纯Transformer的U型分割网络,在多项医学图像分割任务中超越…...
Arduino轻量级CLI库cmdArduino原理与实战
1. 项目概述cmdArduino 是一个面向 Arduino 平台的轻量级命令行接口(CLI)库,由 Freaklabs 团队的 Akiba 与 Jacinta 开发。其核心定位并非构建功能完备的嵌入式 Shell(如 BusyBox 或 MicroPython REPL),而是…...
OpenClaw 实战:让AI 页面“秒开即用”,实现 Vibecoding 真正闭环
我为什么会发出这个疑问呢?是因为我研究Web开发中的一个问题时,HTTP请求体在 Filter(过滤器)处被读取了之后,在 Controller(控制层)就读不到值了,使用 RequestBody 的时候。 无论是字…...
网络SEO优化与移动端优化的关系是什么
网络SEO优化与移动端优化的关系:为什么两者不可分割 在当前互联网时代,网络SEO优化与移动端优化的关系越来越受到企业和营销人员的关注。随着移动互联网的普及,越来越多的用户通过手机浏览器进行网络搜索和浏览。因此,如何在网络…...
硫化物固态电池 vs 传统锂电池:性能、成本、安全性全方位对比
硫化物固态电池 vs 传统锂电池:性能、成本、安全性全方位对比 当特斯拉Model 3车主王先生第一次听说"固态电池"这个概念时,他正为爱车冬季续航缩水30%而烦恼。像他这样的电动车用户,正在推动一场动力电池技术的静默革命——从传统液…...
基于扩展卡尔曼滤波器(EKF)的PMSM无位置传感器控制优化策略解析
1. 为什么PMSM需要无位置传感器控制? 永磁同步电机(PMSM)凭借高功率密度、高效率等优势,在电动汽车、工业伺服等领域广泛应用。但传统控制方案依赖机械位置传感器(如编码器、旋转变压器),不仅增…...
打卡信奥刷题(3071)用C++实现信奥题 P6951 [ICPC 2018 WF] Wireless is the New Fiber
P6951 [ICPC 2018 WF] Wireless is the New Fiber 题目描述 一种新型的无限带宽无线通信刚刚通过测试,并被证明可以替代现有的基于光纤的通信网络,后者正努力跟上流量增长的步伐。你被委托决定新通信网络的布局。当前的通信网络由一组节点(…...
用Quartus原理图搭个抢答器:从74175到数码管,一个FPGA初学者的完整项目复盘
从零构建FPGA抢答器:一位工程师的74系列芯片实战手记 第一次接触FPGA开发时,我被Quartus原理图界面上那些密密麻麻的逻辑门和连线吓得不轻。直到把课堂上学到的数字电路知识真正落地成一个抢答器项目,才突然理解了那些看似抽象的触发器、计数…...
内页SEO优化与网站整体优化的关系是什么_网站内页的图片优化需要注意哪些
内页SEO优化与网站整体优化的关系是什么 在当前竞争激烈的互联网环境中,网站的整体优化和内页SEO优化密不可分。内页SEO优化是提升网站整体排名的关键环节,而网站整体优化则为内页SEO提供了坚实的基础。这两者之间的关系可以从多个方面进行探讨…...
