gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:52 26 4
gpt4 key购买 nike

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

int main(){
vector<int> a;
a.push_back(28);
}

第二行vector<int> a显示了两次。请看屏幕截图 enter image description here

谁能告诉我为什么该行显示两次?

源代码t.cpp是使用

编译的
  • g++ -g -std=c++11 t.cpp,
  • 在 Ubuntu 16.04 LTS 上使用 g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

我注意到帖子 gdb,why "next" show each source line twice? , 但那里没有给出答案。

提前致谢!

最佳答案

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

这样做可能是因为在离开范围时会调用析构函数,这可能导致多个对象在同一行被销毁。在调试器中多次显示“}”并不是很有帮助,因为用户看不到接下来要销毁哪个对象。

关于c++ - 为什么 GDB "next"两次显示构造函数行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43466345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com