1. 空类与默认成员函数概述
在C++中,空类是指不包含任何成员变量和成员函数的类。虽然看起来空无一物,但编译器会为每个空类自动生成6个默认成员函数。这些函数构成了C++对象生命周期的基本框架:
cpp复制class Empty {}; // 看似空类,实际包含6个默认成员函数
这6个默认成员函数可以分为三大类:
-
初始化和清理:
- 构造函数(Constructor)
- 析构函数(Destructor)
-
拷贝复制:
- 拷贝构造函数(Copy Constructor)
- 赋值运算符重载(Operator=)
-
取地址重载:
- 普通对象取地址(Operator&)
- const对象取地址(Operator& const)
实际开发中,当类中包含指针成员或需要管理资源(如动态内存、文件句柄等)时,我们通常需要手动实现这些函数,特别是拷贝构造函数、赋值运算符重载和析构函数,以避免浅拷贝带来的问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 构造函数深度解析
2.1 构造函数基础特性
构造函数是类中最重要的成员函数之一,它具有以下核心特征:
- 函数名必须与类名完全相同
- 没有返回值类型(连void都不需要)
- 创建对象时自动调用
- 支持函数重载(一个类可以有多个构造函数)
cpp复制class Date {
public:
// 无参构造函数
Date() {
_year = 1970;
_month = 1;
_day = 1;
}
// 带参构造函数
Date(int year, int month, int day) {
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
2.2 默认构造函数详解
默认构造函数是指不需要参数就能调用的构造函数,包括三种情况:
- 无参构造函数
- 全缺省构造函数
- 编译器自动生成的构造函数
cpp复制class Date {
public:
// 1. 无参构造是默认构造
Date() {}
// 2. 全缺省构造也是默认构造
Date(int year = 1970, int month = 1, int day = 1) {
_year = year;
_month = month;
_day = day;
}
};
重要规则:一个类中只能有一个默认构造函数。如果同时存在无参构造和全缺省构造,会导致调用歧义,编译器报错。
2.3 编译器生成的默认构造函数行为
当类中没有显式定义任何构造函数时,编译器会自动生成一个默认构造函数。这个自动生成的函数有以下特
