MST
星途 面试题库

面试题:C++类缺省函数的基础应用

请说明C++类中缺省构造函数、缺省析构函数的作用。假设我们有一个简单的类`MyClass`,包含一个`int`类型的成员变量`data`,请手动实现这个类的缺省构造函数和缺省析构函数,并简要解释在什么情况下会自动调用它们。
26.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

缺省构造函数的作用

缺省构造函数是在创建对象时,如果没有提供任何实参,编译器会自动调用的构造函数。它的作用是对对象的成员变量进行初始化,使其处于一个合理的初始状态。如果用户没有定义任何构造函数,编译器会自动生成一个缺省构造函数,这个自动生成的缺省构造函数会对类的成员变量进行默认初始化(对于基本数据类型,不会进行初始化;对于类类型,会调用其缺省构造函数)。

缺省析构函数的作用

缺省析构函数是在对象生命周期结束时,编译器自动调用的函数。它的作用是释放对象在生命周期中分配的资源,比如动态分配的内存等。如果用户没有定义析构函数,编译器会自动生成一个缺省析构函数,对于成员变量中的类类型,会调用其析构函数。

MyClass类的缺省构造函数和缺省析构函数实现

class MyClass {
private:
    int data;
public:
    // 缺省构造函数
    MyClass() : data(0) {
        // 这里将data初始化为0
    }
    // 缺省析构函数
    ~MyClass() {
        // 这里如果有动态分配的资源需要释放,可以在这里写释放代码
        // 由于本类中没有动态分配资源,所以这里为空
    }
};

自动调用情况

  1. 缺省构造函数:当使用以下方式创建对象时会自动调用缺省构造函数:
    MyClass obj; // 直接定义对象,没有提供任何实参
    MyClass* ptr = new MyClass(); // 使用new动态分配对象且没有提供实参
    
  2. 缺省析构函数:当对象生命周期结束时会自动调用缺省析构函数。例如:
    {
        MyClass obj; // 创建对象
    } // 离开这个作用域,obj的生命周期结束,自动调用析构函数
    
    MyClass* ptr = new MyClass();
    delete ptr; // 使用delete释放动态分配的对象时,自动调用析构函数