临时对象

临时对象

    直接调用构造函数会产生一个临时对象。

    临时对象生命周期只在一条语句运行的时间中,作用域也只在一条语句中。

#include <stdio.h>

class Test 
{
int mi; public: Test(int i)
  { mi
= i; } Test()
  { Test(
0); //直接调用构造函数时,此处只创建了一个临时对象并未将0赋值给mi,临时对象作用域和生存时间都是这条语句。 } void print()
  { printf(
"mi = %d ", 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
", i);
        mi = i;
    }
    Test(const Test& t)         //拷贝构造函数
    {
        printf("Test(const Test& t) : %d
", t.mi);
        mi = t.mi;
    }
    Test()                    //构造函数
    {
        printf("Test()
");
        mi = 0;
    }
    int print()
    {
        printf("mi = %d
", mi);
    }
    ~Test()                    // 析构函数
    {
        printf("~Test()
");
    }
};

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;
}
原文地址:https://www.cnblogs.com/zsy12138/p/10821436.html