zoukankan      html  css  js  c++  java
  • 临时对象

    临时对象

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

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

    #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;
    }
  • 相关阅读:
    minio 注意事项
    vim编辑器的快捷命令
    kubernetes Label的增删改查
    JVM java堆内存
    navicat注册机
    hibernate学习笔记_基础配置
    Hibernate学习笔记_helloworld
    junit4初级
    Struts学习笔记_声明式异常处理
    Struts学习笔记_拦截器
  • 原文地址:https://www.cnblogs.com/zsy12138/p/10821436.html
Copyright © 2011-2022 走看看