MST

星途 面试题库

面试题:C++中构造函数和析构函数的调用顺序问题

假设有一个类A,类A中包含一个成员变量是类B的对象,在类A的对象被创建和销毁时,请详细说明构造函数和析构函数的调用顺序,并给出相关代码示例进行解释。
46.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 调用顺序
    • 当创建类A的对象时:
      • 首先调用类B的构造函数,因为类A中有类B的对象作为成员变量,会先初始化成员变量。
      • 然后调用类A的构造函数。
    • 当销毁类A的对象时:
      • 首先调用类A的析构函数。
      • 然后调用类B的析构函数。
  2. 代码示例
#include <iostream>

class B {
public:
    B() {
        std::cout << "B的构造函数被调用" << std::endl;
    }
    ~B() {
        std::cout << "B的析构函数被调用" << std::endl;
    }
};

class A {
public:
    A() {
        std::cout << "A的构造函数被调用" << std::endl;
    }
    ~A() {
        std::cout << "A的析构函数被调用" << std::endl;
    }
private:
    B b;
};

int main() {
    A a;
    return 0;
}

在上述代码中,当创建A类对象a时,会先输出“B的构造函数被调用”,再输出“A的构造函数被调用”。当程序结束,a对象被销毁时,会先输出“A的析构函数被调用”,再输出“B的析构函数被调用”。