例:
#include <stdio.h>
class Test
{
private:
int mi;
public:
Test(int i)
{
mi = i;
}
Test()
{
Test(0);
}
void print()
{
printf("mi = %d\n",mi);
}
};
int main()
{
Test t;
t.print();
return 0;
}
输出结果:
mi = 9494516
答案:
直接调用构造函数将产生一个临时对象
临时对象的声明周期只有一条语句的时间
临时对象的作用域只在一条语句中
临时对象C++值得警惕的灰色地带
例:
#include <stdio.h>
class Test
{
private:
int mi;
void init(int i)
{
mi = i;
}
public:
Test(int i)
{
init(i);
}
Test()
{
init(0);
}
void print()
{
printf("mi = %d\n",mi);
}
};
int main()
{
Test ti;
ti.print();
return 0;
}
输出结果:
mi = 0
现代C++编译器在不影响最终执行的结果的前提下,尽量减少临时对象的产生
例:
#include <stdio.h>
class Test
{
int mi;
public:
Test(int i)
{
printf("Test(int i) : %d\n", i);
mi = i;
}
Test(const Test& t)
{
printf("Test(const Test& t) : %d\n", t.mi);
mi = t.mi;
}
Test()
{
printf("Test()\n");
mi = 0;
}
int print()
{
printf("mi = %d\n", mi);
}
~Test()
{
printf("~Test()\n");
}
};
Test func()
{
return Test(20);
}
int main()
{
Test t = Test(10); // ==> Test t = 10;
Test tt = func(); // ==> Test tt = Test(20); ==> Test tt = 20;
t.print();
tt.print();
return 0;
}
输出结果:
main begin
Test()
mi = 0
~Test()
Test(int i)
mi = 10
~Test()
main end
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。