zoukankan      html  css  js  c++  java
  • C++ 拷贝构造函数和拷贝赋值运算符的区别

    转自:https://www.cnblogs.com/wangguchangqing/p/6141743.html

    1.区别

    拷贝构造函数和赋值运算符的行为比较相似,都是将一个对象的值复制给另一个对象;

    但是其结果却有些不同,拷贝构造函数使用传入对象的值生成一个新的对象的实例,而赋值运算符是将对象的值复制给一个已经存在的实例

    拷贝构造函数也是一种构造函数,那么它的功能就是创建一个新的对象实例;赋值运算符是执行某种运算,将一个对象的值复制给另一个对象(已经存在的)。

    调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生。如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那就是对已有的对象赋值,调用的是赋值运算符

    2.例子

    class Person
    {
    public:
        Person(){cout<<"无参构造函数"<<endl;}
        Person(const Person& p)
        {
            cout << "Copy Constructor" << endl;
        }
    
        Person& operator=(const Person& p)
        {
            cout << "Assign" << endl;
            return *this;
        }
    
    private:
        int age;
        string name;
    };
    
    void f(Person p)
    {
        return;
    }
    
    Person f1()
    {
        Person p;//无参构造函数
        return p;
    }
    
    int main(){
        Person p;          //无参构造函数
        Person p1 = p;    //  Copy Constructor
        Person p2;          //无参构造函数
        p2 = p;           //  Assign
        f(p2);            //  Copy Constructor
        cout<<"-----"<<endl;
        p2 = f1();        //  Assign
        cout<<"-----"<<endl;
        Person p3 = f1(); //
        return 0;
    } #输出: 无参构造函数 Copy Constructor 无参构造函数 Assign Copy Constructor ----- 无参构造函数 Assign ----- 无参构造函数

    唯一不明白的地方是最后一句,调用了f1内部创建了对象,打印“无参构造函数”,那么又赋值给p3,为什么没调用拷贝构造函数呢?不明白。

  • 相关阅读:
    ES6中map数据结构学习
    React中,input外边如果包一个div,可以把input的onChange事件绑定到div上面,并且也生效
    筛数组
    字符串slice、substring、substr
    DVA-subscriptions
    react hooks学习
    React会自动把虚拟DOM数组展开
    React+Redux+Dva学习
    [转] 关于卫星轨道的科普
    边缘计算在智慧城市中的应用【摘录】
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/13886598.html
Copyright © 2011-2022 走看看