MST

星途 面试题库

面试题:C++中构造函数调用顺序调试技巧之局部对象分析

假设有如下C++代码: ```cpp class A { public: A() { std::cout << "A constructor" << std::endl; } }; class B { public: B() { std::cout << "B constructor" << std::endl; } }; class C { public: A a; B b; C() { std::cout << "C constructor" << std::endl; } }; ``` 请描述在 `C c;` 这条语句执行时,构造函数的调用顺序。如果想要调试查看这个调用顺序,你会使用哪些常见的调试手段?
47.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 构造函数调用顺序

    • 首先调用 A 的构造函数,输出 A constructor。因为 C 类中有成员变量 A a;,在 C 的构造函数执行前,会先构造其成员变量,A 类型的成员变量 a 先被构造。
    • 接着调用 B 的构造函数,输出 B constructorC 类的成员变量 B b;A 类型成员变量构造完成后被构造。
    • 最后调用 C 的构造函数,输出 C constructor
  2. 常见调试手段

    • 使用 cout 打印信息:在每个构造函数中添加 cout 语句,就像题目代码中已经做的那样,通过观察输出信息的顺序来确定构造函数的调用顺序。
    • 使用调试器(如GDB)
      • 设置断点:在 C c; 语句所在行以及各个构造函数内部设置断点。
      • 启动调试:在命令行使用 gdb your_program 启动调试(假设程序名为 your_program)。
      • 单步执行:使用 nextstep 命令单步执行代码,观察程序执行流程,在断点处查看调用栈,从而了解构造函数的调用顺序。
    • 使用IDE(如CLion、Visual Studio Code 等)
      • 设置断点:在IDE的代码编辑器中,在 C c; 语句以及各个构造函数内部点击行号旁边设置断点。
      • 启动调试:使用IDE的调试启动按钮启动调试会话。
      • 观察调试信息:通过IDE的调试窗口,如调用栈窗口、控制台输出窗口等,查看构造函数的调用顺序和相关信息。