1. 类默认成员函数概述
在C++中,当我们定义一个类时,即使不显式编写任何成员函数,编译器也会自动生成6个默认成员函数。这些函数构成了类的核心功能框架,理解它们的行为对于编写健壮的C++代码至关重要。
1.1 C++98标准下的6个默认成员函数
- 默认构造函数:负责对象初始化
- 默认析构函数:负责资源清理
- 默认拷贝构造函数:实现对象复制
- 默认赋值运算符重载:处理对象赋值
- 默认取地址运算符重载:提供对象地址
- 默认const取地址运算符重载:提供const对象地址
注意:C++11标准新增了移动构造函数和移动赋值运算符两个默认成员函数,但本文主要讨论前4个核心函数。
1.2 学习默认成员函数的两个维度
- 编译器默认行为:了解编译器自动生成的版本如何工作,是否满足我们的需求
- 自定义实现:当默认行为不符合需求时,如何正确实现这些函数
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 构造函数深度解析
构造函数是类初始化过程中的核心角色,它确保对象在创建时处于有效状态。
2.1 构造函数基本概念
构造函数的主要任务是初始化对象成员,而非分配内存空间。对于局部对象,其内存空间在栈帧创建时就已经分配完成。
关键特性:
- 函数名必须与类名相同
- 无返回值(连void都不需要写)
- 对象实例化时自动调用
- 支持函数重载
cpp复制class MyClass {
public:
// 构造函数声明
MyClass();
MyClass(int value);
};
2.2 默认构造函数详解
当类中没有显式定义构造函数时,编译器会自动生成一个无参的默认构造函数。需要注意三种特殊形式:
- 隐式生成的默认构造函数
- 显式定义的无参构造函数
- 全缺省参数的构造函数
重要规则:这三种形式不能同时存在,否则会导致调用歧义。它们统称为"默认构造函数",即不需要传递实参就能调用的构造函数。
2.2.1 默认构造函数的调用陷阱
调用无参构造函数时不能加空括号,否则会被解析为函数声明:
cpp复制MyClass obj; // 正确:调用无参构造
MyCl
