临时对象函数
直接调用构造函数会产生一个临时对象。优化
临时对象生命周期只在一条语句运行的时间中,做用域也只在一条语句中。spa
#include <stdio.h> class Test
{ int mi; public: Test(int i)
{ mi = i; } Test()
{ Test(0); //直接调用构造函数时,此处只建立了一个临时对象并未将0赋值给mi,临时对象做用域和生存时间都是这条语句。 } void print()
{ printf("mi = %d\n", mi); } }; int main() { Test t; //在这条语句后立刻构造一个对相并立刻析构。 t.print(); // 因此此处为随机值。
Test().print(); // 此处建立了一个临时对象并调用了其的print函数,后立刻析构。
Test t = Test(100); //此处不会产生临时对象,在函数返回时析构。 return 0; }
#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); // 并无调用构造函数建立临时对象并调用拷贝构造函数赋值给 t 。C++优化代码,结构是直接调用构造函数。代码优化为 Test t = 10; Test tt = func(); // C++优化代码,结果是直接调用构造函数。代码优化为 Test tt = Test(20); 再优化为 Test tt = 20; t.print(); tt.print(); return 0; }