01_现代C++特殊成员函数

现代C++特殊成员函数

C++ 98有四个特殊成员函数:默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符。C++11添加了两个函数:移动构造函数、移动赋值运算符。
学习重点: 有必要了解各个函数什么时候自动生成;自动生成的函数有没可能产生预期外的行为;
面试考点: 各个类别的特殊成员函数均有考点,语法使用细节非常关键

特殊成员函数(编译器自动生成)

共6个

  • 构造函数
  • 析构函数
  • 拷贝构造函数
  • 拷贝赋值运算符
  • 移动构造函数
  • 移动赋值运算符

默认构造函数:仅当类不存在用户声明的构造函数是才自动生成

拷贝构造函数:仅当类没有显式声明拷贝构造函数时才自动生成,并且如果用户声明了移动操作,编译器通常不会自动生成默认拷贝构造函数

拷贝赋值运算符:仅当类没有显式声明拷贝赋值运算符时才自动生成,并且如果用户声明了移动操作,编译器通常不会自动生成默认拷贝赋值运算符

移动操作:仅当类没有显式声明移动操作、拷贝操作和析构函数时才自动生成。

函数生成内容口诀:用户声明拷贝不会自动生成移动,用户声明移动不会自动生成拷贝。

C++98有四个特殊成员函数:默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符。 注意 :这几个函数只有在需要的时候才会被生成,比如你在代码中使用了这几个函数但是类中没有明确声明。

C++11添加了两个函数:移动构造函数、移动赋值运算符。

  1. 两个拷贝函数(实现代码)是独立的。即:你只声明了其中的一个拷贝函数,但是在代码中有使用另一个拷贝函数,那编译器也会自动为你生成这个拷贝函数(逐成员拷贝);(c++98和c++11中都是这样的规则)
    • 需要内存管理时,逐成员拷贝会出问题,如不同类对象指向同一个内存地址。
  2. 两个移动函数不是独立的。即:你只声明了其中的一个移动函数,编译器不管你在代码中是否有使用另一个,也不会再帮你生成了;

后面本专栏会针对各个特殊成员函数进行详细讲解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42140.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电力物联网数据采集装置 高精度电能计量表

摘要 随着现代电力系统的复杂化和负荷多样化,电能质量问题日益突出。高精度电能质量监测装置在配电系统中的应用,可以有效监测和分析谐波、不平衡、电压暂升暂降等电能质量问题,为电网优化运行和故障诊断提供重要数据支持。本文以APM电能质量…

element-plus中,Tour 漫游式引导组件的使用

目录 一.Tour 漫游式引导组件的简单介绍 1.作用 2.基本使用 3.展示效果 二.实战1:介绍患者病历表单 1.要求 2.实现步骤 3.展示效果 结语 一.Tour 漫游式引导组件的简单介绍 1.作用 快速了解一个功能/产品。 2.基本使用 从官网复制如下代码: &…

【Unity网络编程知识】使用Socket实现简单TCP通讯

1、Socket的常用属性和方法 创建Socket TCP流套接字 Socket socketTcp new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 1.1 常用属性 1)套接字的连接状态 socketTcp.Connected 2)获取套接字的类型 socketTcp.So…

【C++游戏引擎开发】《线性代数》(1):环境配置与基础矩阵类设计

一、开发环境配置 1.1 启用C 20 在VS2022中新建项目后右键项目 1.2 启用增强指令集 1.3 安装Google Test vcpkg安装使用指南 vcpkg install gtest:x64-windows# 集成到系统目录,只需要执行一次,后续安装包之后不需要再次执行 vcpkg integrate inst…

Flutter完整开发实战详解(一、Dart语言和Flutter基础)

前言 在如今的 Flutter 大潮下,本系列是让你看完会安心的文章。本系列将完整讲述:如何快速从0开发一个完整的 Flutter APP,配套高完成度 Flutter 开源项目 GSYGithubAppFlutter。同时也会提供一些 Flutter 的开发细节技巧,并针对…

Spring 事件监听机制介绍以及源码分析

在复杂的业务系统中,模块间的过度耦合往往会导致代码维护困难、扩展性受限。Spring 事件监听机制基于观察者模式,提供了一种优雅的解耦方案,使得组件间通过事件驱动实现松耦合通信。这种机制不仅被 Spring 框架内部使用(如容器生命…

【VSCode的安装与配置】

目录: 一:下载 VSCode二:安装 VSCode三:配置 VSCode 一:下载 VSCode 下载地址:https://code.visualstudio.com/download 下载完成之后,在对应的下载目录中可以看到安装程序。 二:安装…

2024年认证杯SPSSPRO杯数学建模C题(第二阶段)云中的海盐全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 C题 云中的海盐 原题再现: 巴黎气候协定提出的目标是:在2100年前,把全球平均气温相对于工业革命以前的气温升幅控制在不超过2摄氏度的水平,并为1.5摄氏度而努力。但事实上,许多之前的…

Scala基础语法与简介

对象 -对象有属性和行为。例如:一只狗的状属性有:颜色,名字,行为有:叫、跑、吃等。对象是一个类的实例。 类 -类是对象的抽象,而对象是类的具体实例。 方法 -方法描述的基本的行为,一个类可以…

鸿蒙UI开发

鸿蒙UI开发 本文旨在分享一些鸿蒙UI布局开发上的一些建议,特别是对屏幕宽高比发生变化时的应对思路和好的实践。 折叠屏适配 一般情况(自适应布局/响应式布局) 1.自适应布局 1.1自适应拉伸 左右组件定宽 TypeScript //左右定宽 Row() { …

BeeWorks:为企业打造专网部署即时通讯解决方案

在数字化快速发展的今天,企业的沟通与协作越来越依赖于高效的即时通讯工具。然而,保障信息安全和数据隐私也变得愈发重要。这种情况下,专网部署即时通讯软件成为许多企业的首要选择。BeeWorks作为一款优质的专网部署即时通讯软件,…

uniapp笔记-swiper组件实现轮播图

思路 主要就是参考 swiper | uni-app官网 实现轮播图。 实例 新建一个banner.vue通用组件。 代码如下&#xff1a; <template><view>轮播图</view> </template><script> </script><style> </style> 随后在index.vue中导…

企业在人工智能创新与安全之间走钢丝

2025 年全球 AI/ML 工具使用量将激增&#xff0c;企业将 AI 融入运营之中&#xff0c;员工也将 AI 嵌入日常工作流程中。报告显示&#xff0c;企业对 AI/ML 工具的使用同比增长 3,000% 以上&#xff0c;凸显了各行各业迅速采用 AI 技术&#xff0c;以提升生产力、效率和创新水平…

vue - [Vue warn]: Duplicate keys detected: ‘0‘. This may cause an update error.

问题描述&#xff1a; vue项目中&#xff0c;对表单数组赋值时&#xff0c;控制台抛出警告&#xff1a; 问题代码&#xff1a; 问题分析&#xff1a; 1、Vue 要求每个虚拟 DOM 节点必须有唯一的 key。该警告信息通常出现在使用v-for循环的场景中&#xff0c;多个同级节点使用…

Containerd+Kubernetes搭建k8s集群

虚拟机环境设置&#xff0c;如果不是虚拟机可以忽略不看 1、安装配置containerd 1.1 添加 Kubernetes 官方仓库 安装cri-tools的时候需要用到 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kub…

ubuntu服务器server版安装,ssh远程连接xmanager管理,改ip网络连接。图文教程

ventoy启动服务器版iso镜像&#xff0c;注意看server名称&#xff0c;跟之前desktop版ubuntu不一样。没有gui界面。好&#xff0c;进入命令行界面。语言彻底没汉化了&#xff0c;选英文吧&#xff0c;别的更看不懂。 跟桌面版ubuntu类似&#xff0c;选择是否精简系统&#xff0…

QOpenGLWidget视频画面上绘制矩形框

一、QPainter绘制 在QOpenGLWidget中可以绘制&#xff0c;并且和OpenGL的内容叠在一起。paintGL里面绘制完视频后&#xff0c;解锁资源&#xff0c;再用QPainter绘制矩形框。这种方式灵活性最好。 void VideoGLWidget::paintGL() {glClear(GL_COLOR_BUFFER_BIT);m_program.bi…

蓝桥杯备考:真题之飞机降落(暴搜+小贪心)

我们最多有十架飞机&#xff0c;可以选择dfs暴力搜索&#xff0c;枚举每种情况 那么&#xff0c;我们降落的时候怎么确定新的起点也就是newend呢&#xff1f; 如果飞机飞到机场的时刻是大于原来的end的&#xff0c;我们就让tili作为newend 否则&#xff0c;我们就让end作为ne…

解决 Element UI 嵌套弹窗的状态管理问题!!!

解决 Element UI 嵌套弹窗的状态管理问题 &#x1f527; 问题描述 ❓ 在使用 Element UI 开发一个多层嵌套弹窗功能时&#xff0c;遇到了以下问题&#xff1a; 弹窗只能打开一次&#xff0c;第二次点击无法打开 &#x1f6ab;收到 Vue 警告&#xff1a;避免直接修改 prop 值…

实时图像处理:让你的应用更智能

一、项目背景 在数字化飞速发展的今天&#xff0c;图像处理技术已成为众多领域不可或缺的核心组件。从医疗影像的精准诊断&#xff0c;到自动驾驶汽车对道路环境的实时感知&#xff0c;再到安防系统中对异常行为的迅速捕捉&#xff0c;实时图像处理正以惊人的速度改变着我们的…