为什么GDB"next"显示构造函数行两次?

leo*_*leo 1 c++ gdb c++11

当使用gdb"next"跟踪下面的代码时,

int main(){
    vector<int> a;
    a.push_back(28);
}
Run Code Online (Sandbox Code Playgroud)

第二行vector<int> a显示两次.请看屏幕截图在此输入图像描述

谁能告诉我为什么这条线显示两次?

源代码t.cpp是使用编译的

  • g ++ -g -std = c ++ 11 t.cpp,
  • 在Ubuntu 16.04 LTS with g ++(Ubuntu 5.4.0-6ubuntu1~16.04.4)5.4.0 20160609

我注意到post gdb,为什么"next"显示每个源代码行两次?,但没有给出答案.

提前致谢!

小智 5

因为G ++将对象构造函数的代码分配给与析构函数相同的行,正如"一些程序员老兄"建议的那样.在Compiler Explorer网站上查看生成的程序集.

这可能是因为在离开范围时调用析构函数,这可能导致多个对象在同一行上被销毁.在调试器中多次显示'}'并不是很有用,因为用户无法看到下一个要销毁的对象.