23-临时对象

来源:互联网 发布:电脑是怎么储存数据的 编辑:程序博客网 时间:2024/05/14 16:41

1、

这里写图片描述
mi = 306583632是个随即值

2、

这里写图片描述

3、

这里写图片描述

#include <stdio.h>class Test {    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 t;    t.print();    Test(10).print();//直接调用构造函数 就会产生一个临时对象,作用于仅为该条语句,结束后释放    return 0;}

4、

这里写图片描述

5、

这里写图片描述

6、

这里写图片描述

#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; //优化后                        // 1、生成临时对象,                        //2、用临时对象初始化 t对象,                        //3调用拷贝构造函数,但是最终并没有调用拷贝构造函数,原因是编译器进行优化减少临时对象的产生。                        //这种方法会调用两次构造函数,影响效率    Test tt = func();  // ==> Test tt = Test(20); ==> Test tt = 20;                        //编译器进行优化,没有产生临时对象,    t.print();    tt.print();    return 0;}