• C++拷贝构造


    调用时机

    • 使用一个已经创建完的对象来初始化一个新对象
    • 值传递的方式给函数传参
    • 以值方式返回局部对象

    使用一个已经创建完的对象来初始化一个新对象

    class Person
    {
    public:
       Person()
       {
          cout << "Person()构造" << endl;
       }
    
       ~Person()
       {
          cout << "~Person()析构" << endl;
       }
    
       Person(const Person &p)
       {
          cout << "Person()拷贝构造" << endl;
          this->name = p.name;
          this->age = p.age;
       }
    
    private:
       string name;
       int age;
    };
    
    int main()
    {
       Person p1;
       Person p2 = p1;
    
       return 0;
    }
    Person()构造
    Person()拷贝构造
    ~Person()析构
    ~Person()析构

    值传递的方式给函数传参

    class Person
    {
    public:
       Person()
       {
          cout << "Person()构造" << endl;
       }
    
       ~Person()
       {
          cout << "~Person()析构" << endl;
       }
    
       Person(const Person &p)
       {
          cout << "Person()拷贝构造" << endl;
          this->name = p.name;
          this->age = p.age;
       }
    
       void test(Person p){}
    
    private:
       string name;
       int age;
    };
    
    int main()
    {
       Person p1;
       Person p2;
    
       p2.test(p1);
    
       return 0;
    }
    Person()构造
    Person()构造
    Person()拷贝构造
    ~Person()析构
    ~Person()析构
    ~Person()析构

    以值方式返回局部对象

    class Person
    {
    public:
       Person()
       {
          cout << "Person()构造" << endl;
       }
    
       ~Person()
       {
          cout << "~Person()析构" << endl;
       }
    
       Person(const Person &p)
       {
          cout << "Person()拷贝构造" << endl;
          this->name = p.name;
          this->age = p.age;
       }
    
       Person test()
       {
          return *this;
       }
    
    private:
       string name;
       int age;
    };
    
    int main()
    {
       Person p1;
       Person p2 = p1.test();
    
       return 0;
    }
    Person()构造
    Person()拷贝构造
    ~Person()析构
    ~Person()析构
  • 相关阅读:
    emergency mode(紧急模式)问题处理方法
    NFS简介与安装
    NACOS动态配置
    Mysql应用日志时间与系统时间相差八小时
    SQL*LOADER错误总结
    设置SQL*Plus运行环境
    对象切片
    编译原理:代码优化
    编译原理:运行时机制
    编译原理:剖析python编译阶段
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/15973975.html
Copyright © 2020-2023  润新知