zoukankan      html  css  js  c++  java
  • const成员-拷贝构造函数(copy constructor)-浅拷贝、深拷贝

    const成员

    • const成员:被const修饰的成员变量、非静态成员函数
    • 必须类里面初始化
    class Car {
    public:
        const int m_price = 0;    //const常量设置
        Car() :m_price(0) {}    //也可以在构造函数中初始化
        void run() const {    //const一般写最后
            cout << "run()" << endl;
    
            m_price = 10;
        }
    };
    

    const成员函数

    • 两个同名函数构成了重载
    void run() const {}
    void run() {}
    

    引用类型成员变量必须初始化

    int age;
    int & m_price = age;
    car(int &price) :m_price(price) {}
    

    拷贝构造函数(copy constructor)

    • 拷贝构造函数是构造函数的一种
    • 当利用已存在的对象创建一个新对象时(类似于拷贝),就会调用新对象的拷贝构造函数进行初始化
    • 拷贝构造函数的格式是固定的,接收一个const引用作为参数
    //拷贝构造函数
    Car(const Car &car) {
        cout << "Car(const Car &car)" << endl;
    }
    Car car4(car3);
    

    浅拷贝

    浅拷贝:指针类型的变量只会拷贝地址值

    • 编译器默认的提供的拷贝是浅拷贝(shallow copy)

    • 堆空间指向栈空间都很危险
      栈空间随机都可能回收,堆空间可以自己控制

    • 在堆空间再申请一个空间用于拷贝

    深拷贝

    public:
        Car(int price = 0, char *name = NULL) :m_price(price){
            if (name == NULL ) return;
    
            // 申请新的堆空间
            m_name = new char[strlen(name) + 1] {};
            // 拷贝字符串数据到新的堆空间
            strcpy(m_name, name);
        }
    
        ~Car(){
            if (m_name == NULL) return;
            delete[] m_name;
            m_name = NULL;
        }
    

    • 浅拷贝(shallow copy):指针类型的变量只会拷贝地址值
    • 深拷贝(deep copy):将指针指向的内容拷贝到新的存储空间
        Car(const Car &car) :m_price(car.m_price) {
            if (car.name == NULL ) return;
    
            // 申请新的堆空间
            m_name = new char[strlen(name) + 1] {};
            // 拷贝字符串数据到新的堆空间
            strcpy(m_name, name);
        }
    
  • 相关阅读:
    FP-growth算法思想和其python实现
    HDInsight Command
    OpsMgr Connector 20070
    Exchange: How to get Mailbox size in Exchange Shell?
    Get members for ‘Dynamic Distribution Group’
    Hadoop 学习之路-开篇
    Office365 配置完成ADFS之后修改密码之后需要删除登陆信息
    添加只读访问权限到邮箱里的所有文件夹
    使用 Windows PowerShell 连接到 Lync Online
    windows 7无法打补丁
  • 原文地址:https://www.cnblogs.com/sec875/p/12328947.html
Copyright © 2011-2022 走看看