第一点:直接开门见上的告诉大家在C++中直接调用构造函数将会产生一个临时对象
什么是临时对象,临时对象的特点有哪些?
1.临时对象的生命周期只有一条语句的时间,也就是一行代码的时间
2.临时对象的作用域只在一条语句中
3.临时对象是C++中值得警惕的灰色地带
4.被const 引用作用的对象,它产生的临时对象生命周期将会延长(后面给出验证)
好直接上代码验证上面说说的,
#include <stdio.h>
class Test
{
private:
int mi;
public:
Test(int v)
{
mi=v;
printf("Test(int v) mi=%d\n",mi);
}
Test()
{
printf("Test()\n");
}
~Test()
{
printf("~Test()\n");
}
};
int main()
{
printf("main begin...\n");
Test t1(1);
//Test(1);
printf("main end....\n");
return 0;
}
//输出结果为:
main begin...
Test(int v) mi=1
main end....
~Test()
//结果分析,相信这个结果是很正常的,先调用构造函数,然后在return 0;返回之前在调用对象的析构函数。
//接下来直接看调用构造函数产生的结果为什么?
#include <stdio.h>
class Test
{
private:
int mi;
public:
Test(int v)
{
mi=v;
printf("Test(int v) mi=%d\n",mi);
}
Test()
{
printf("Test()\n");
}
~Test()
{
printf("~Test()\n");
}
};
int main()
{
printf("main begin...\n");
//Test t1(1);
Test(1);
printf("main end....\n");
return 0;
}
//输出结果为:
main begin...
Test(int v) mi=1
~Test()
main end....
//结果分析 发现最后徐才打印出 main end...这句话,说明 直接调用构造函数 Test(1) 产生一个临时对象,临时对象的生命周期只有一行代码,刚刚构造完,然后就析构了。