面试题答案
一键面试缺省构造函数的作用
缺省构造函数是在创建对象时,如果没有提供任何实参,编译器会自动调用的构造函数。它的作用是对对象的成员变量进行初始化,使其处于一个合理的初始状态。如果用户没有定义任何构造函数,编译器会自动生成一个缺省构造函数,这个自动生成的缺省构造函数会对类的成员变量进行默认初始化(对于基本数据类型,不会进行初始化;对于类类型,会调用其缺省构造函数)。
缺省析构函数的作用
缺省析构函数是在对象生命周期结束时,编译器自动调用的函数。它的作用是释放对象在生命周期中分配的资源,比如动态分配的内存等。如果用户没有定义析构函数,编译器会自动生成一个缺省析构函数,对于成员变量中的类类型,会调用其析构函数。
MyClass
类的缺省构造函数和缺省析构函数实现
class MyClass {
private:
int data;
public:
// 缺省构造函数
MyClass() : data(0) {
// 这里将data初始化为0
}
// 缺省析构函数
~MyClass() {
// 这里如果有动态分配的资源需要释放,可以在这里写释放代码
// 由于本类中没有动态分配资源,所以这里为空
}
};
自动调用情况
- 缺省构造函数:当使用以下方式创建对象时会自动调用缺省构造函数:
MyClass obj; // 直接定义对象,没有提供任何实参 MyClass* ptr = new MyClass(); // 使用new动态分配对象且没有提供实参
- 缺省析构函数:当对象生命周期结束时会自动调用缺省析构函数。例如:
{ MyClass obj; // 创建对象 } // 离开这个作用域,obj的生命周期结束,自动调用析构函数 MyClass* ptr = new MyClass(); delete ptr; // 使用delete释放动态分配的对象时,自动调用析构函数