• c++ 中 拷贝构造函数 和 operator= 函数 的使用区别


    拷贝构造函数(Copy Constructor)和赋值运算符重载函数(operator=)是用于在C++中处理对象复制的两个不同概念,它们有以下区别:

    用途:

    拷贝构造函数:它用于在创建一个新对象时,将一个已有对象的值复制到新对象中。通常在对象的初始化过程中调用,如对象声明时的初始化、函数参数传递(按值传递)或返回对象(按值返回)等情况。
    赋值运算符重载函数:它用于将一个已有对象的值赋给另一个已有对象。通常在已存在的对象上调用,使用赋值运算符(=)来实现对象之间的值复制。
    调用时机:

    拷贝构造函数:会在以下情况下被调用:
    对象声明并初始化时。
    通过值传递的方式将对象作为函数参数传递给函数。
    通过值返回的方式从函数中返回一个对象。
    在某些标准库容器的操作中,如插入元素时。
    赋值运算符重载函数:会在以下情况下被调用:
    使用赋值运算符(=)将一个已有对象的值赋给另一个已有对象。
    在类的对象之间进行赋值操作。
    下面是一个简单示例,演示了拷贝构造函数和赋值运算符重载函数的使用:

    class MyClass {
    public:
        int value;
    
        // 拷贝构造函数
        MyClass(const MyClass& other) {
            value = other.value;
        }
    
        // 赋值运算符重载函数
        MyClass& operator=(const MyClass& other) {
            if (this != &other) {
                value = other.value;
            }
            return *this;
        }
    };
    
    int main() {
        MyClass obj1(42);
        MyClass obj2(obj1); // 调用拷贝构造函数
        MyClass obj3 = obj1; // 也调用拷贝构造函数
    
        MyClass obj4(10);
        obj4 = obj1; // 调用赋值运算符重载函数
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    总结一下,拷贝构造函数用于创建一个新对象并将已有对象的值复制到新对象中,而赋值运算符重载函数用于将一个已有对象的值赋给另一个已有对象。这两个函数在不同的上下文和使用场景中起作用。

  • 相关阅读:
    数据结构:二叉树
    HTML文件的书写规范、HTML标签的介绍、HTML标签的语法
    【前端】vue阶段案例:vue-router使用流程
    黑*头条_第4章_文章搜索前后端成形记 & 实名认证审核
    PDF文件怎么解密?教你三种解密的方法
    代码随想录算法公开课!
    嵌入式C语言自我修养基本概念考察(一)
    一文简单入门Node.js
    Android 使用 MediaPlayer 播放声音
    js中减少if-else的几个小技巧
  • 原文地址:https://blog.csdn.net/wniuniu_/article/details/133614981