当前位置: 首页 > news >正文

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

现代C++特殊成员函数

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

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

共6个

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

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

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

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

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

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

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

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

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

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

相关文章:

  • Android 10上如何查看GPU占用率 安卓手机怎么看gpu频率
  • 介绍一下JVM内存结构面试回答(后续会继续补充)
  • Netty源码—10.Netty工具之时间轮
  • QT 动态布局实现(待完善)
  • 【docker】Dockerfile中ENTRYPOINT和CMD区别理解
  • c语言strcat和strlen的注意事项
  • 实现分布式锁的方案与实战应用案例
  • PP-ChatOCRv3新升级:多页PDF信息抽取支持自定义提示词工程,拓展大语言模型功能边界
  • 【深度学习新浪潮】什么是推理模型?
  • spring boot中“编程式事务”与“声明式事务”对比
  • day18 学习笔记
  • leetcode146.LRU缓存
  • 全球消费理性化浪潮下:跨境电商品牌溢价体系面临重构
  • 深入解析异构计算:从原理到 C++ 实践
  • ubuntu22.04 如何安装 ch341 驱动
  • MySQL-触发器
  • QT基础:安装与简介
  • Unity插件SuperScrollView详解
  • 端到端语音识别案例
  • Docker部署sprintboot后端项目
  • 网站怎样建设友情链接/南宁网络推广外包
  • 做网站怎么做/搜索引擎排名谷歌
  • wordpress代码主题/怎么把网站排名优化
  • 南充建网站的资料/免费网站电视剧全免费
  • android studio官网/网络seo排名
  • 做淘客的网站有哪些/写软文用什么软件