这一章节我们来聊一个C++中比较坑爹的地方:临时对象。先来看看下边的代码:
#include <iostream>
#include <string>
using namespace std;
class test
{
private:
int m_value;
public:
test(){}
test(int value)
{
m_value = value;
}
void fun()
{
test(10); //调用带参构造函数,将成员变量m_value赋值为10
}
int getValue()
{
return m_value;
}
};
int main()
{
test t;
t.fun();
cout << "t.getValue() = " << t.getValue() << endl; //按代码语义,应该输出10
system("pause");
}
上边的代码中,我们在成员函数fun()中调用了构造函数,想把成员变量m_value赋值为10,下边我们来看看输出结果:
但是从输出结果看,成员变量值却是随机值,和我们设想的不一致。下边我们便来分析分析,在C++中:
-直接调用构造函数将产生一个临时对象
-临时对象的生命周期只有一条语句
-临时对象的作用域只在一条语句中
-临时对象是C++中需要警惕的灰色地带
知道了直接调用构造函数会产生临时对象,及临时对象的特性,我们在往后的编码中,要避开直接调用构造函数,以免产生临时对象!