下面程序输出什么:
程序意图:
在Test()中以0作为参数调用Test(int i),将成员变量的初始值设置为0,将成员初始化为0,运行结果:成员变量的值为随机值。
思考
构造函数是一个特殊的函数是否可以直接调用是否可以在构造函数中调用构造函数?直接调用构造函数的行为是什么?
答案
直接调用构造函数将产生一个临时对象,临时对象的生命周期只有一条语句的时间,临时对象的作用域只在一条语句中
临时对象是C++中值得警惕的灰色地带
解决方案:创建一个private类型的初始化函数,在构造函数里面去调用此函数
#include <iostream>
using namespace std;
class Test {
int mi;
void init(int i)
{
mi = i;
}
public:
Test(int i)
{
cout << "Test(i)" << endl;
init(i);
}
Test()
{
cout << "Test()" << endl;
init(0);
}
void print()
{
cout << mi << endl;
}
~Test()
{
cout << "~Test()" << endl;
}
};
int main()
{
Test();
Test(1);
return 0;
}
结果:
从结果可以看出,直接调用构造函数会产生临时对象,临时对象的存在时间只在一条语句,在开发中应该避免使用临时对象