MST

星途 面试题库

面试题:C++构造函数与析构函数在继承体系中的自动调用

假设有一个继承体系,基类Base有构造函数和析构函数,派生类Derived继承自Base也有自己的构造函数和析构函数。当在堆上创建一个Derived类对象时,构造函数和析构函数的调用顺序是怎样的?如果在Derived类构造函数中抛出异常,又会发生什么?
11.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 正常创建对象时构造函数和析构函数的调用顺序
    • 构造函数调用顺序
      • 首先调用Base类的构造函数。
      • 然后调用Derived类的构造函数。
    • 析构函数调用顺序
      • 当对象被销毁时,首先调用Derived类的析构函数。
      • 然后调用Base类的析构函数。
  2. 在Derived类构造函数中抛出异常时的情况
    • 如果在Derived类构造函数中抛出异常,由于Derived类对象没有完全构造成功,那么Derived类的析构函数不会被调用。
    • 但是Base类的构造函数已经执行完毕,Base类对象已经构造成功,所以Base类的析构函数会被调用,以清理Base类对象分配的资源 。同时,因为对象没有完全构造成功,在堆上分配的Derived类对象的内存会被释放(如果使用new操作符,new操作符会自动处理内存释放,防止内存泄漏)。