C++函数中局部变量的清除是在return前还是后?
2013-12-15
用类中的析构函数测试一下就知道了!
#include <iostream>
#include <string>
using namespace std;
class Test
{
public:
int num;
string str;
public:
Test(int m_num, string m_str)
{
num = m_num;
str = m_str;
}
void show()
{
cout << "num = " << num << endl;
cout << "str = " << str << endl;
}
~Test()
{
cout << "这是析构函数,便于查看变量什么时候销毁!" << endl;
}
};
int call_test(Test m_obj); //注意是传值(变量的一份拷贝)
int main()
{
Test obj(10, "hello world");
call_test(obj); //在函数中查看变量(一份拷贝)的销毁
system("pause");
return 0;
}
然后单步跟踪程序,
int call_test(Test m_obj)
{
m_obj.show();
return 0;
}
下面的第一张图片是在函数中的情况,当程序运行到return 0的时候,并没有调用obj 的析构函数
继续单步,看第二张图片,出现了析构函数的调用,说明这个时候才销毁变量obj(这个对象本来就是一个变量),所以我说,变量是在return 0之后进行销毁的!
继续单步(查看main函数的对象变量是在上面时候销毁的):
看第三张图片,这个是在main函数的变量(就是obj这个对象),是在main函数中return 0之后进行调用析构函数的!
析构函数的作用就是销毁对象中的成员变量。我发现调用析构函数都是在return 0之后调用。
所以:变量是在return 0之后进行销毁的!(只是我的个人意见,有可能是错误的)
2013-12-15
所以,准确地说,局部变量会在RET前被清理。
2013-12-15