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

C++创建一个空类的时候,编译器会自动生成哪些函数了

编译器会自动生成以下6个特殊成员函数:

1. 默认构造函数 (Default Constructor)

ClassName();
  • 当没有其他构造函数被显式声明时生成

  • 执行默认的成员初始化(对内置类型不初始化,类类型调用其默认构造函数)

2. 拷贝构造函数 (Copy Constructor)

ClassName(const ClassName&);
  • 用于通过同类型的另一个对象来初始化新对象

  • 执行成员逐个拷贝(浅拷贝)

3. 拷贝赋值运算符 (Copy Assignment Operator)

ClassName& operator=(const ClassName&);
  • 用于将一个对象的值赋给另一个已存在的对象

  • 返回对象的引用以支持链式赋值

4. 析构函数 (Destructor)

~ClassName();
  • 在对象生命周期结束时自动调用

  • 执行资源的清理工作

5. 移动构造函数 (Move Constructor) - C++11及以上

ClassName(ClassName&&);
  • 用于通过右值引用来初始化新对象

  • 可以"窃取"源对象的资源,提高效率

6. 移动赋值运算符 (Move Assignment Operator) - C++11及以上

ClassName& operator=(ClassName&&);
  • 用于通过右值引用来赋值给已存在的对象

  • 同样可以"窃取"源对象的资源

class Empty {};  // 空类// 编译器自动生成等价于:
class Empty {
public:Empty() {}                            // 默认构造函数Empty(const Empty& other) {}          // 拷贝构造函数  Empty(Empty&& other) {}               // 移动构造函数 (C++11)Empty& operator=(const Empty& other) { return *this; }  // 拷贝赋值Empty& operator=(Empty&& other) { return *this; }       // 移动赋值 (C++11)~Empty() {}                           // 析构函数
};

重要注意事项

  1. 一旦显式声明了任何构造函数,编译器不再生成默认构造函数

  2. 一旦显式声明了拷贝操作,编译器不再生成移动操作

  3. 一旦显式声明了移动操作,编译器不再生成拷贝操作

  4. 析构函数通常应该声明为虚函数(如果类可能被继承)

http://www.dtcms.com/a/343650.html

相关文章:

  • 数据处理与统计分析 —— apply自定义函数
  • lesson44:Redis 数据库全解析:从数据类型到高级应用
  • 鸿蒙开发中的List组件详解
  • spring之自定义拦截器:HandlerInterceptor 控制请求生死权
  • Java微服务开发:从入门到精通
  • 证书只是手段:把学习变成可复用能力的路线图
  • FPGA 在情绪识别领域的护理应用(三)
  • gRPC 与 HTTP 性能对比分析
  • C++浅拷贝和深拷贝区别
  • 【华为OD-C卷-019 对称字符串 100分(python、java、c++、js、c)】
  • 【Transient-Free 3DGS】delayed densification + coarse to fine增加GS的鲁棒性
  • 【GaussDB】使用gdb定位GaussDB编译package报错
  • 图像中物体计数:基于YOLOv5的目标检测与分割技术
  • 智能编程中的智能体与 AI 应用:概念、架构与实践场景
  • Effective C++ 条款54:熟悉标准库
  • typescript常用命令选项
  • Function Call与MCP:大模型能力扩展的两条路径对比
  • CF每日4题(1500-1700)
  • 谈谈架构的内容
  • 前端别名与环境变量使用
  • AI 赋能教育变革:机遇、实践与展望
  • 基于随机森林的红酒分类与特征重要性分析
  • MySQL高可用之MHA实战
  • 【高等数学】第九章 多元函数微分法及其应用——第九节 二元函数的泰勒公式
  • 北京JAVA基础面试30天打卡14
  • 【51单片机学习】AT24C02(I2C)、DS18B20(单总线)、LCD1602(液晶显示屏)
  • AI 在医疗领域的应用与挑战
  • 带宽评估(三)lossbase_v2
  • 测试面试题第二篇:专项业务领域(上)
  • 嵌入式学习day33-网络-c/s