• 函数返回值为对象时,构造析构的执行细节


    看如下代码:

    #include<iostream>
    
    class TestConstructor
    {
    public:
        TestConstructor()
        {
            std::cout<<"TestConstructor()"<<std::endl;
        }
    
        ~TestConstructor()
        {
            std::cout<<"~TestConstructor()"<<std::endl;
        }
    
        TestConstructor(const TestConstructor& testObj)
        {
            std::cout<<"TestConstructor(const TestConstructor&)"<<std::endl;
        }
    
        TestConstructor& operator = (const TestConstructor& testObj)
        {
            std::cout<<"TestConstructor& operator = (const TestConstructor& testObj)"<<std::endl;
            return *this;
        }
    };
    
    TestConstructor testFunc()
    {
        TestConstructor testInFunc;  //3、调用TestConstructor() 生成对象testInFunc
        return testInFunc;           //4、调用TestConstructor(const TestConstructor&) 生成临时对象
                                     //5、调用析构函数,析构对象testInFunc
    }
    
    int main()
    {
        TestConstructor test;  //1、调用TestConstructor() 生成对象test
        test = testFunc();     //2、调用testFunc()    //6、调用等号把临时对象复制给对象test  //7、调用析构函数,析构临时对象
        return 0;              //8、调用析构函数,析构对象test
    }

    看输出:

    有注释,有输出。执行细节,一目了然了吧

  • 相关阅读:
    Less:优雅的写CSS代码
    线程池(ThreadPool)
    TiDB
    Docker实现CentOS容器SSH远程登录
    Oracle-Hints详解
    Oracle sql执行计划解析
    引擎基本服务接口API介绍
    ssh远程连接docker中linux(ubuntu/centos)
    自制操作系统
    kafka-net
  • 原文地址:https://www.cnblogs.com/yemsheng/p/2915318.html
Copyright © 2020-2023  润新知