如果一个类中什么成员都没有,简称为空类空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数
C++类的6个默认成员函数包括默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数和移动赋值运算符。下面分别介绍并且给出代码示例:
1.默认构造函数:
默认构造函数是在创建对象时自动调用的构造函数,用于初始化对象的成员变量。如果没有显式定义,默认构造函数会被编译器生成。
class MyClass {
public:// 默认构造函数MyClass() {// 执行初始化操作}
};
2.析构函数:
析构函数在对象被销毁时自动调用,用于释放对象占用的资源。如果没有显式定义析构函数,默认析构函数会被编译器生成。
class MyClass {
public:// 析构函数~MyClass() {// 执行资源释放操作}
};
3.拷贝构造函数:
拷贝构造函数用于生成一个新对象,并将原对象的成员变量值复制给新对象。如果没有显式定义拷贝构造函数,默认拷贝构造函数会被编译器生成。
class MyClass {
public:// 拷贝构造函数MyClass(const MyClass& other) {// 执行成员变量的复制操作}
};
4.拷贝赋值运算符:
拷贝赋值运算符用于将一个对象的值赋给另一个已经存在的对象。如果没有显式定义拷贝赋值运算符,默认拷贝赋值运算符会被编译器生成。
class MyClass {
public:// 拷贝赋值运算符MyClass& operator=(const MyClass& other) {// 执行成员变量的赋值操作return *this;}
};
5.移动构造函数:
移动构造函数用于生成一个新对象,并从原对象“窃取”资源,避免资源的拷贝和分配。如果没有显式定义移动构造函数,默认移动构造函数会被编译器生成。
class MyClass {
public:// 移动构造函数MyClass(MyClass&& other) noexcept {// 执行资源的移动操作}
};
6.移动赋值运算符:
移动赋值运算符用于将一个对象的资源“窃取”给另一个已经存在的对象,避免资源的拷贝和分配。如果没有显式定义移动赋值运算符,默认移动赋值运算符会被编译器生成。
class MyClass {
public:// 移动赋值运算符MyClass& operator=(MyClass&& other) noexcept {// 执行资源的移动操作return *this;}
};