C++中的临时对象

第一点:直接开门见上的告诉大家在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) 产生一个临时对象,临时对象的生命周期只有一行代码,刚刚构造完,然后就析构了。

 

posted @ 2019-09-25 10:22  repinkply  阅读(33)  评论(0)    收藏  举报