我是C ++的新手,我一直在学习如何执行程序。我正在研究这段代码:
#include <iostream>
#include <string>
using namespace std;
void sayHello() {
cout << "Hello world!" << endl;
}
void greet(string name) {
cout << "Hello " << name << ", how are you?" << endl;
}
int main()
{
sayHello();
int a = 10;
string name = "Johan";
greet(name);
return 0;
}
我在Code Blocks IDE中调试了这段代码。当它到达return 0
语句时,黄色箭头(步入模式)返回到string name
语句,然后再次转到return语句以完成调试。我认为它与释放内存有关,但为什么不去int a = 10
?
这是正常的吗?调试器做了什么?调试器不应该直接转到结束括号吗?
非常感谢。
答案 0 :(得分:1)
这是因为std::string
是一个带有非默认析构函数的类,这是调试器告诉你它要销毁这个std::string
对象的方法,通过调用它的析构函数。调试器用很多的话来说,好吧,我现在正在做return语句,而第一个业务是破坏这个std::string
,所以执行跳转到了声明了这个std::string
对象,让你知道我即将执行这个析构函数;现在,在那里,我已经完成了,现在我将恢复从此功能返回的过程&#34;。
普通的int
没有一个奇特的shmancy析构函数,没有什么特别需要做的,以使其消失。